19

私はいくつかのソースディレクトリを持つプロジェクトを持っています:

src/A
   /B
   /C

それぞれの Makefile.am には次の内容が含まれています。

AM_CXXFLAGS = -fPIC -Wall -Wextra

各ソースフォルダーでこれを繰り返さないようにするにはどうすればよいですか?

src/Makefile.am と configure.in を変更しようとしましたが、成功しませんでした。AC_PROG_CXX を使用してコンパイル フラグをグローバルに設定できると思いましたが、これらのマクロの使用方法に関するドキュメントがあまり見つかりません (そのようなドキュメントへのポインタはありますか?)。

前もって感謝します

4

2 に答える 2

26

いくつかのことができます:

(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を使用して共有ライブラリを構築できます)。

于 2008-11-28T10:17:32.193 に答える
0

configure.ac で EXTRA_CFLAGS を使用する

たとえば、あなたの場合は次のようになります。

EXTRA_CFLAGS=-fPIC -Wall -Wextra

于 2016-03-17T12:21:09.803 に答える