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