[英]Ensure config.h included
我正在將現有代碼移植到autotools。 以前,所有定義都通過命令行傳遞,例如-DOS_LINUX
。
有許多源文件,有些是生成的。
在我的configure.ac
我添加了:
AC_CONFIG_HEADERS(config.h)
現在我想確保如果源文件不包含config.h
,則編譯失敗。
我目前的解決方案是在命令行上重新定義int
並將其修復回config.h
:
CPPFLAGS="$CPPFLAGS -Dint=bad -I\$(top_srcdir)"
AH_BOTTOM([#include <custom.h>])
AC_OUTPUT
custom.h:
#undef int
我正在尋找一種更清潔的方式。 例如,使用makefile變量$(top_srcdir)
是否正確?
這不是你要求的,但你會考慮在每個文件中添加config.h嗎? 您可以在CFLAGS / CXXFLAGS中添加-include選項,以確保項目中的每個文件都包含config.h。
請參閱https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
-include file進程文件,好像#include“file”出現在主源文件的第一行。 但是,搜索文件的第一個目錄是預處理器的工作目錄,而不是包含主源文件的目錄。 如果在那里找不到,則在#include“...”搜索鏈的其余部分中搜索正常。 如果給出了多個-include選項,則文件將按照它們在命令行中顯示的順序包含在內。
在我看來,更好的解決方案(當你看到錯誤時更清楚)如下:
custom.h:
#ifndef CONFIG_INCLUDED
#error "config.h is missing"
#endif
config.h中:
#define CONFIG_INCLUDED
main.cpp中:
#include "config.h"
#include "custom.h"
幾年前,當我做同樣的事情時,我只是在命令行上留下了autoconf生成的定義,因為有太多的東西無法解決這么少的好處。 GNU Build System沒有任何關於要求你包含config.h
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.