いくつかのことができます:
(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を使用して共有ライブラリを構築できます)。