makefile - 在每个子目录(子 make)中的 Makefile.am 上使用相同的 CFLAGS

标签 makefile autotools automake

我有一个项目,每个子目录中都有一个 Makefile.am。

如何将 AM_CFLAGS 变量设置从父 Makefile.am 传播到其他子目录的 Makefile.am(子 make)?

我知道以下方法:

  • 导出变量
  • include 语句到通用 ${top_srcdir}/Makefile_cflags.am 文件。
  • MAKEFLAGS

递归 make 不是一种选择,我回避 includeMAKEFLAGS 语句方法。

GNU 手册似乎没有清楚地概述如何将编译器/链接器设置传播到子 make。

最佳答案

事实证明,这毕竟是一个 autoconf/configure.ac 解决方案。 GNU 称之为输出变量

为了将 CFLAGS 从父 Makefile 传播到每个子 make(子目录的 Makefile),我将以下几行添加到配置.ac`:

AC_SUBST(AM_CFLAGS)

然后,对于每个子品牌,我添加了以下行来“导入”该变量:

AM_CPPFLAGS = @AM_CPPFLAGS@

然后执行 autogen.sh 来重建 configure.inMakefile.inMakefile。然后执行 configure 并立即传播 AM_CFLAGS

对于 AM_CPPFLAGSAM_CXXFLAGSAM_LDFLAGS 也是一个有用的解决方案。

此处给出的 AC_SUBST 的更多详细信息:https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html

关于makefile - 在每个子目录(子 make)中的 Makefile.am 上使用相同的 CFLAGS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827664/

相关文章:

我们可以在汇编文件上使用 NDEBUG 吗?

c - autotools:使用另一个目录中的代码进行编译

autotools - config.h.in 未被用作模板

c++ - 使用 AX_BOOST_BASE 进行 autoconf boost 检测

c - 静态库与静态库的链接

android - 避免冗余构建以制作 tessaract android 库 && 将 tessaract 库链接到 c++ NDK

c - 尝试创建 *.o 时出错

linux - 在 autotools 中生成 header 的构建过程

c++ - make 文件抛出以下两个错误

c++ - 'CXXABI_1.3.1 1' not found`