2008-11-27 53 views
17

我有幾個來源目錄的項目:自動工具:如何設置全局彙編標誌

src/A 
    /B 
    /C 

在各中,Makefile.am包含

AM_CXXFLAGS = -fPIC -Wall -Wextra 

如何才能避免在每個源重複此文件夾?

我試圖修改src/Makefile.am和configure.in,但沒有成功。我想我可以使用AC_PROG_CXX來設置全局的編譯標誌,但是找不到有關如何使用這些宏的文檔(你有沒有指向這樣的文檔的指針?)。

在此先感謝

回答

23

你可以做幾件事情:

(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可用於構建共享庫)。

+0

使用包括Makefile.am成語將造成的automake輸出依賴關係的Makefile和Makefile.in,最終得到回包含文件和automake文件。所以改變它也會導致更新。 – johnny 2009-02-12 08:27:43

0

在configure中使用EXTRA_CFLAGS。AC

例如,對於您的情況會是這樣:

EXTRA_CFLAGS=-fPIC -Wall -Wextra