我正在将现有代码移植到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)
是否正确?
答案 0 :(得分:1)
这不是你要求的,但你会考虑在每个文件中添加config.h吗?您可以在CFLAGS / CXXFLAGS中添加-include选项,以确保项目中的每个文件都包含config.h。
请参阅https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
-include file 处理文件,好像#include&#34; file&#34;出现在主要源文件的第一行。但是,搜索了第一个目录 for file是预处理器的工作目录而不是 包含主源文件的目录。如果没有找到,那就是 在#include&#34; ...&#34;的剩余部分中搜索搜索链为 正常。如果给出了多个-include选项,则包含文件 按照它们出现在命令行中的顺序。
答案 1 :(得分:0)
在我看来,更好的解决方案(当你看到错误时更清楚)如下:
custom.h:
#ifndef CONFIG_INCLUDED
#error "config.h is missing"
#endif
的config.h:
#define CONFIG_INCLUDED
main.cpp中:
#include "config.h"
#include "custom.h"
答案 2 :(得分:0)
几年前,当我做同样的事情时,我只是在命令行上留下了autoconf生成的定义,因为有太多的东西无法解决这么少的好处。没有任何关于要求你包含setTimeout();
的GNU构建系统。