我完全糊涂了,尝试了很多方法来测试它,但它仍然是疯了 我正在尝试定义一个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
(包括我的定义AND 在 config.h 中有效显示#defined'd的那些。)
当我不运行 autoheader 并只将config.h.in中的变量行更改为
时#define DEBUG
然后生成 config.h ,然后我的DEBUG变量在 config.h
中有效地出现#define'd * Autoconf版本2.67
*我正在进行的项目是ibus
答案 0 :(得分:3)
正在运行autoheader
会修改config.h.in
,但不会修改config.status
。 config.status
不知道您对configure.ac
所做的更改,并且不知道为DEBUG
做替换。在您运行autoconf
以及生成的configure
脚本之前,它不会更新。
答案 1 :(得分:2)
只需使用autoreconf
,而不是手动调用autoconf
,automake
等。
答案 2 :(得分:1)
请在[{1}}之前放置AC_DEFINE
行。