いくつかのことができます:
(1) 1 つの解決策は、すべての に共通の makefile フラグメントを含めることですMakefile.am。
include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...
その場合、あなたは書くでしょう
AM_CXXFLAGS = -fpic -Wall -Wextra
今後は、このファイルを編集するだけでcommon.mk、すべての にマクロやルールを簡単に追加できるようになります。Makefile.am
(2) 別の解決策は、次のように、これらの変数をグローバルに設定することですconfigure.ac(名前configure.inはずっと前に廃止されました)。
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
その後、 s で何も言う必要さえありませんMakefile.am。これらは、このグローバル定義を自動的に継承します。欠点は、簡単にオプトアウトできないことです (最初のソリューションでは、 を含めないことを簡単に決定できますcommon.mk)。また、依存関係はサードパーティの人々にとって実際には明示的ではありません (彼らが読んだときにMakefile.am、フラグがどこにあるかについてのヒントがありません)。から来るかもしれません)。
(3) 3 番目の解決策は、orsogufoが提案したように実行することです: でユーザー変数 CXXFLAGS を上書きしますconfigure.ac。これは GNU ビルド システムの機能の 1 つを無効にするため、使用しないことをお勧めします。ユーザーはmake-time でこの変数をオーバーライドできます。たとえば、次のように入力したい場合があります
make CXXFLAGS='-O0 -ggdb'
コードの一部をデバッグするとき、これは の定義を上書きしますCXXFLAGS(ただし、 の定義は上書きしませんAM_CXXFLAGS)。正直なところ、ほとんどのプロジェクトはこれを正しくサポートできませんCXXFLAGS。
最後に、-fpic、-Wall、および-Werrorは移植可能なオプションではないことに注意してください。プロジェクトの範囲によっては、これらの設定チェックを追加したい場合があります ( gnulibは最近取得した新しいマクロを使用して警告フラグをテストし、libtoolを使用して共有ライブラリを構築できます)。