簡體   English   中英

Autotools:如何設置全局編譯標志

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM