你可以做几件事:
(1) 一种解决方案是在您的所有 Makefile.ams 上包含一个通用的 makefile 片段:
include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...
在这种情况下你会写
AM_CXXFLAGS = -fpic -Wall -Wextra
到common.mk,将来只需编辑此文件即可更轻松地向所有Makefile.ams 添加更多宏或规则。
(2) 另一种解决方案是在您的configure.ac 中全局设置这些变量(名称configure.in 早已被弃用),如:
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
那么你甚至不必在你的Makefile.ams 中说任何东西,它们会自动继承这个全局定义。缺点是您不能轻易选择退出(使用第一个解决方案很容易决定不包含common.mk)并且依赖关系对于第三方人员来说并不是很明确(当他们阅读Makefile.am时他们有没有提示标志可能来自哪里)。
(3) 第三种解决方案是按照orsogufo 的建议:覆盖configure.ac 中的用户变量CXXFLAGS。我建议不要这样做,因为它破坏了 GNU 构建系统的一项功能:允许用户在 make-time 覆盖此变量。例如,您可能想要输入
make CXXFLAGS='-O0 -ggdb'
在调试一段代码时,这将覆盖CXXFLAGS 的任何定义(但
不是AM_CXXFLAGS 中的那些)。老实说,大多数项目都无法正确支持这一点,因为它们与CXXFLAGS 开玩笑。
最后,我应该提到-fpic、-Wall 和-Werror 不是可移植选项。
根据您的项目范围,您可能希望为这些添加配置检查(gnulib 最近获得了新的宏来测试警告标志,libtool 可用于构建共享库)。