程序需要将CFLAGS=-D_GNU_源代码添加到编译中,这应该放在哪里?

程序需要将CFLAGS=-D_GNU_源代码添加到编译中,这应该放在哪里?,c,autotools,C,Autotools,我有一个使用自动工具的项目。我想在编译项目时添加-D_GNU_源代码。我可以直接将其破解到Makefile或configure脚本中,但当我在发布之前生成新脚本时,configure.am和Makefile.am会覆盖它们 定义此项的正确位置在哪里?正确的语法是什么?是否有我应该使用的宏?您可以通过在configure.ac文件中添加类似的行来修改CFLAGS: CFLAGS="$CFLAGS -D_GNU_SOURCE" 然后重新生成配置脚本(这将添加到现有的CFLAGS而不是替换它,这是您

我有一个使用自动工具的项目。我想在编译项目时添加-D_GNU_源代码。我可以直接将其破解到Makefile或configure脚本中,但当我在发布之前生成新脚本时,configure.am和Makefile.am会覆盖它们


定义此项的正确位置在哪里?正确的语法是什么?是否有我应该使用的宏?

您可以通过在
configure.ac
文件中添加类似的行来修改
CFLAGS

CFLAGS="$CFLAGS -D_GNU_SOURCE"
然后重新生成配置脚本(这将添加到现有的
CFLAGS
而不是替换它,这是您应该做的-这样用户可以在编译时指定自己的
CFLAGS
选项,并且您的脚本不会覆盖它们)

但是,对于
\u GNU\u SOURCE
的特定情况,应改用内置的autoconf宏:

AC_GNU_SOURCE
将其放在
configure.ac
文件的前面,放在调用C编译器的任何规则之前。请注意,这不会将
-D_GNU_SOURCE
添加到
CFLAGS
,但是-如果您使用的是配置头(设置为
AC_CONFIG_header
),那么它会添加
\u GNU SOURCE
的定义,如果您没有,那么它会将
-D_GNU SOURCE=1
添加到
DEFS
,您可以将其添加到Makefile中的
CFLAGS


如果您使用的是配置头(对于任何非平凡的autoconf项目,您可能都应该使用配置头),那么它应该包含在任何系统头之前。

我认为这可能是不同的。我想问的是,在使用自动工具构建项目时,定义这些类型的选项的最佳实践是什么。另一个问题是关于使用任何生成系统时要做什么。我将该宏添加到configure.ac,并在运行configure后重新运行autoconf,make失败。@泡腾幻影:
ac\u GNU\u SOURCE
将定义添加到
DEFS
或配置头(如果您正在使用)。在前一种情况下,您需要确保将
DEFS
中的定义传递给编译器,在后一种情况下,您需要确保在系统头之前将配置头包含在源文件中。