确保包含config.h

时间:2015-11-26 09:38:30

标签: c++ autoconf

我正在将现有代码移植到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)是否正确?

3 个答案:

答案 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构建系统。