我正在尝试定义一个 C 预处理器变量“DEBUG”(#define DEBUG)来激活开源项目中的调试日志记录,它使用 GNU Autotools。所以我放了一行
AC_DEFINE(DEBUG, 1, [My description for DEBUG])
在 configure.ac 中。
但是什么? 重新生成config.h后
autoheader && ./config.status
我看一下config.h的内容,看到这个
/* My description for DEBUG */
/* #undef DEBUG */
这里到底发生了什么?其他类似的 C 预处理器变量(由项目)以相同的方式定义。它们都出现了“#define”并且没有注释,为什么我的变成了“#undef”并且被注释掉了?
所以我尝试了很多方法来做到这一点,不仅仅是这种方式,我模仿了项目定义其他符号的方式。尝试了各种值,从1到TRUE,FALSE,各种变量,从“DEBUG”到“FOOBAR”,“KJJJ”......但是它仍然那样工作,我感到非常沮丧。
更多信息:
在查看 config.h.in 时,我看到所有的行都是这样的:
#undef SOMEVARIABLE
(包括我的定义和在config.h 中有效#defined 的定义。)
当我不运行 autoheader 并且只是将 config.h.in 中的变量行更改为
#define DEBUG
然后生成 config.h,然后我的 DEBUG 变量在 config.h 中有效 #define 出现
*Autoconf 版本 2.67
*我正在做的项目是ibus
最佳答案
运行 autoheader
会修改 config.h.in
,但不会修改 config.status
。 config.status
不知道您对 configure.ac
所做的更改,也不知道要对 DEBUG
进行替换。在您运行 autoconf
和生成的 configure
脚本之前,它不会更新。
关于Autotools AC_DEFINE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033758/