我有一个使用autotools的项目。我想在编译项目时添加-D_GNU_SOURCE。我可以将其破解为Makefile或配置脚本,但是当我在发布之前生成新的时,它们会被configure.am和Makefile.am覆盖。
在哪里定义它的正确位置以及正确的语法是什么?我应该使用宏吗?
答案 0 :(得分:1)
您可以通过在CFLAGS
文件中添加这样的行来修改configure.ac
:
CFLAGS="$CFLAGS -D_GNU_SOURCE"
然后重新生成您的配置脚本(这会添加到现有的CFLAGS
而不是替换它,这就是您应该做的事情 - 因此用户可以在编译时指定自己的CFLAGS
选项,并且您的脚本赢了“ t覆盖它们。)
但是,对于_GNU_SOURCE
的特定情况,您应该使用内置的autoconf宏:
AC_GNU_SOURCE
在调用C编译器的任何规则之前,将其尽早放在configure.ac
文件中。请注意,这不会将-D_GNU_SOURCE
添加到CFLAGS
,如果您使用的是配置标头(使用AC_CONFIG_HEADER
设置),则会为_GNU_SOURCE
添加定义那个,如果你不是,那么它会-D_GNU_SOURCE=1
添加到DEFS
,您可以在Makefile中添加CFLAGS
。
如果您正在使用配置标头(对于任何非平凡的autoconf项目,您可能应该这样),那么它应该包含在任何系统标头之前。