【问题标题】:Program needs CFLAGS=-D_GNU_SOURCE added to compile, where should this go?程序需要添加CFLAGS=-D_GNU_SOURCE来编译,这个应该去哪里?
【发布时间】:2013-07-22 21:56:29
【问题描述】:

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

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

【问题讨论】:

  • 我认为这是不同的。我问的是在使用自动工具构建项目时定义这些类型的选项的最佳实践是什么。另一个问题是关于使用任何构建系统时要做什么。

标签: c autotools


【解决方案1】:

您可以修改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,您可以在Makefile 中将其添加到CFLAGS

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

【讨论】:

  • 我将该宏添加到 configure.ac 并重新运行 autoconf,运行 configure 后 make 失败。
  • @effervescent-phantom: AC_GNU_SOURCE 将定义添加到DEFS 或您的配置标头(如果您正在使用)。在前一种情况下,您需要确保将DEFS 中的定义传递给编译器,在后一种情况下,您需要确保您的配置头文件包含在系统头文件之前的源文件中。
猜你喜欢
  • 1970-01-01
  • 2012-06-04
  • 2011-06-14
  • 1970-01-01
  • 2010-09-25
  • 2011-04-20
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多