2017-03-18 56 views
0

我有一些-fCFLAGS編譯器選項,如-fsanitize=address和前段時間有人向我建議,我也把這些選項放在LDFLAGS,所以我做了。它沒有造成任何問題。如何判斷CFLAGS的gcc/autotools選項是否也在LDFLAGS中?

我的問題是我怎麼能告訴CFLAGS哪些編譯器選項也應該在LDFLAGS?它只是-f前綴選項?由於

回答

1

我有喜歡-fsanitize =地址和 有人CFLAGS一些-f編譯器選項前一陣子向我建議,我也把這些選項在LDFLAGS 所以我做到了。它沒有造成任何問題。

不僅不會造成任何問題,而且這是建立消毒程序的唯一正確方法。

我的問題是我怎麼能告訴從CFLAGS 哪些編譯器選項也應該在LDFLAGS?它只是-f前綴選項?

,如果你只是做

LDFLAGS = $(CFLAGS) $(LIBS) 

編譯器驅動程序(/usr/bin/gcc)它不會傷害知道哪一個高級別選項是鏈接等等不必要的選項將被簡單地過濾掉。如果你想知道這是如何發生,與-dumpspecs標誌運行gcc:

$ gcc -dumpspecs 
... 
*link_command: 
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %{!fno-use-linker-plugin:%{!fno-lto:  -plugin %(linker_plugin_file)  -plugin-opt=%(lto_wrapper)  -plugin-opt=-fresolution=%u.res  %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}}  }}%{flto|flto=*:%<fcompare-debug*}  %{flto} %{fno-lto} %{flto=*} %l %{no-pie:} %{pie:-pie} ... 

這看起來有點醜,但在現實中,這只是一個小型的語言標誌的翻譯。語法詳細信息給出here(雖然我嚴重懷疑你需要知道他們)。