2017-04-26 36 views
1

我正在嘗試在CMake項目中使用gold鏈接器和clang++。如果我只是做Clang ++和`-fuse-ld = gold`導致許多未使用的選項警告

add_definitions(-fuse-ld=gold) 

我得到噸警告形式:

clang: warning: argument unused during compilation: '-fuse-ld=gold' 
  • 是期權實際工作?
  • 我應該在哪裏添加它在我的CMake腳本中以避免在各處發出警告?

回答

3

由於選項是鏈接階段,將其添加到連接標誌,不給編譯的。 E.g,你可以通過設置變量CMAKE_EXE_LINKER_FLAGS

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") 

注意,這CMake的分隔爲不同的輸出連接類型相關的變量。變量CMAKE_EXE_LINKER_FLAGS僅影響鏈接可執行文件add_executable())。對於庫使用適當的CMAKE_*_LINKER_FLAGS變量:

  • CMAKE_STATIC_LINKER_FLAGS - 爲STATIC
  • CMAKE_SHARED_LINKER_FLAGS - 爲SHARED
  • CMAKE_MODULE_LINKER_FLAGS - 爲模塊秒。
+0

不是編譯器調用鏈接器?該選項用於*選擇*鏈接器,不傳遞給它。實際上,'clang ++ -fuse-ld = gold -Wl,--version'正確報告'gold'版本,而'clang ++ -Wl,-fuse-ld = gold -Wl, - version'會報告'ld',這意味着'clang ++'不會叫'黃金'。 – Svalorzen

+0

是的,CMake(默認情況下)爲**鏈接階段**調用編譯器。但*鏈接器在編譯階段無關*。你得到的警告信息意味着:編譯時忽略鏈接器選項。當你用'-Wl,--version'請求版本時,你得到*版本的鏈接器*;當然,在這種情況下,存在/不存在'-fuse-ld = gold'有一定的意義。 – Tsyvarev