簡體   English   中英

確保包含config.h

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM