我有幾個來源目錄的項目:自動工具:如何設置全局彙編標誌
src/A
/B
/C
在各中,Makefile.am包含
AM_CXXFLAGS = -fPIC -Wall -Wextra
如何才能避免在每個源重複此文件夾?
我試圖修改src/Makefile.am和configure.in,但沒有成功。我想我可以使用AC_PROG_CXX來設置全局的編譯標誌,但是找不到有關如何使用這些宏的文檔(你有沒有指向這樣的文檔的指針?)。
在此先感謝
我有幾個來源目錄的項目:自動工具:如何設置全局彙編標誌
src/A
/B
/C
在各中,Makefile.am包含
AM_CXXFLAGS = -fPIC -Wall -Wextra
如何才能避免在每個源重複此文件夾?
我試圖修改src/Makefile.am和configure.in,但沒有成功。我想我可以使用AC_PROG_CXX來設置全局的編譯標誌,但是找不到有關如何使用這些宏的文檔(你有沒有指向這樣的文檔的指針?)。
在此先感謝
你可以做幾件事情:
(1)一種解決方案是包括所有Makefile.am
一個普遍的makefile片段:在這種情況下
include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...
你會寫
AM_CXXFLAGS = -fpic -Wall -Wextra
到common.mk
並且將來只需編輯此文件,將更容易爲所有Makefile.am
s添加更多宏或規則。
(2)另一種解決辦法是在你的configure.ac
全局設置這些變量(名稱configure.in
早就已經不建議使用),如:
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
然後,你甚至不必說什麼在你的Makefile.am
中,它們會自動繼承這個全局定義。缺點是你不能輕鬆退出(第一種解決方案很容易決定不包括common.mk
),並且依賴關係對第三方人員並不明確(當他們閱讀Makefile.am
時,他們沒有暗示關於哪裏這些標誌可能來自)。 (3)第三種解決方案是按照orsogufo的建議進行:覆蓋用戶變量CXXFLAGS configure.ac
。我建議不要這樣做,因爲它違背了GNU構建系統的一個特點:允許用戶在make
時間覆蓋這個變量。例如,您可能需要調試一段代碼時,鍵入
make CXXFLAGS='-O0 -ggdb'
,這將覆蓋(而不是那些在AM_CXXFLAGS
但 )的CXXFLAGS
任何定義。說實話,大多數項目都沒有正確支持這個,因爲他們玩CXXFLAGS
。
最後,我應該提一下,-fpic
,-Wall
和-Werror
不是便攜式選項。 根據您的項目範圍,您可能需要爲這些添加配置檢查(gnulib最近獲得的新宏以測試警告標誌,libtool可用於構建共享庫)。
在configure中使用EXTRA_CFLAGS。AC
例如,對於您的情況會是這樣:
EXTRA_CFLAGS=-fPIC -Wall -Wextra
使用包括Makefile.am成語將造成的automake輸出依賴關係的Makefile和Makefile.in,最終得到回包含文件和automake文件。所以改變它也會導致更新。 – johnny 2009-02-12 08:27:43