程序需要添加CFLAGS = -D_GNU_SOURCE进行编译,这应该去哪里?

时间:2013-07-22 21:56:29

标签: c autotools

我有一个使用autotools的项目。我想在编译项目时添加-D_GNU_SOURCE。我可以将其破解为Makefile或配置脚本,但是当我在发布之前生成新的时,它们会被configure.am和Makefile.am覆盖。

在哪里定义它的正确位置以及正确的语法是什么?我应该使用宏吗?

1 个答案:

答案 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项目,您可能应该这样),那么它应该包含在任何系统标头之前。