2017-03-18 51 views
0

我正在嘗試在Linux上使用G ++編寫單個CMakeLists.txt文件,並在OSX上使用Clang編寫C++編譯文件。CMake目標鏈接庫G ++標誌與OSX的衝突Clang

我想使用的目標庫標誌-Wl,--start-group-Wl,--end-group與G ++,但這些給人以鏘連接時出現錯誤:ld: unknown option: --start-group

唯一的結果我能找到的選擇只刪除Mac上覆制這些標誌,但這不允許將項目從Linux輕鬆遷移到OSX。我試圖讓這些語句CMake的條件,但這些都被視爲未發現文字庫:

如:$<IF($<NOT:APPLE>)> -Wl,--start-group $<ENDIF($<NOT:APPLE>)>

生產:c++: error: $<IF: No such file or directory

有沒有辦法在CMake的TARGET_LINK_LIBRARIES有條件編輯領域?

回答

0

我想試試這個:

if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") 
    set(START_GROUP "-Wl,--start-group") 
    set(END_GROUP "-Wl,--end-group") 
else() 
    set(START_GROUP "") 
    set(END_GROUP "") 
endif() 

然後只需用$ {START_GROUP}和$ {} END_GROUP替換這些選擇,他們將只與GNU編譯器使用。

如果真的是重要的編譯器,不要基於平臺進行切換。否則,Linux上的Clang用戶將無法構建您的項目。