[英]Autotools : how to set global compilation flag
我有一個項目有幾個源目錄:
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
通過編輯此文件,將更容易向所有Makefile.am
添加更多的宏或規則到common.mk
和將來。
(2)另一種解決方案是在configure.ac
全局設置這些變量(名稱configure.in
很久以前就已棄用),如下所示:
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
然后你甚至不必在Makefile.am
說任何話,它們會自動繼承這個全局定義。 缺點是你不能輕易選擇退出(第一個解決方案很容易決定不包括common.mk
)並且依賴關系並不是真正明確第三方人(當他們閱讀Makefile.am
他們有沒有暗示標志可能來自哪里)。
(3)第三種解決方案是orsogufo建議:在configure.ac
覆蓋用戶變量CXXFLAGS。 我建議反對它,因為它擊敗了GNU Build System的一個特性:允許用戶在make
-time覆蓋這個變量。 例如,您可能想要輸入
make CXXFLAGS='-O0 -ggdb'
調試一段代碼時,這將覆蓋CXXFLAGS
任何定義(但不包括AM_CXXFLAGS
中的AM_CXXFLAGS
)。 說實話,大多數項目都不能正確支持,因為他們使用CXXFLAGS
玩弄技巧。
最后,我應該提一下-fpic
, -Wall
和-Werror
不是便攜式選項。 根據項目的范圍,您可能需要為這些添加配置檢查( gnulib最近獲取的新宏用於警告標志的測試,並且libtool可用於構建共享庫)。
在configure.ac中使用EXTRA_CFLAGS
例如,對於您的情況,它將是這樣的:
EXTRA_CFLAGS=-fPIC -Wall -Wextra
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.