我有一個示範項目,它是structure
就像如下:如何處理的CMake GCC鏈接選項(如全存檔,--allow-多定義)
top_dir
CMakeLists.txt
sub_dir1
CMakeLists.txt
sub_dir2
CMakeLists.txt
top_dir/sub_dir1/CMakeLists.txt
用於構建lib1
通過使用add_library(lib1 ...)
, top_dir/sub_dir2/CMakeLists.txt
用於構建exe1
並鏈接lib1
由target_link_library(exe1 lib1)
。
而且top_dir的內容/的CMakeLists.txt是如下:
add_subdirectory(sub_dir2)
add_subdirectory(sub_dir1)
通常,當構建目標exe1
,cmake的將檢查dependency
所以lib1
將建設exe1
年前建成。問題是我正在將一個已存在的makefile項目轉移到CMake中,並且有很多gcc link options
,如"whole-archive ... no-whole-archive, allow-mutiple-definition"
,如果使用像target_link_library(exe1 "-Wl, --whole-archive ../sub_dir1/liblib1.a --no-whole-archive")
(這樣的形式,這可能不起作用,它只是一個例如),cmake似乎不構建lib1
以上。有什麼辦法我可以使用target_link_library
像target_link_library(exe1 "-Wl, --whole-archive ../sub_dir1/liblib1.a")
和cmake鏈接依賴項檢查仍然工作,或者其他方式我可以將這些gcc鏈接選項轉換爲cmake?
選項'--whole-archive'是*開關*,它不需要與進一步的庫文件和'--no-whole-archive'選項組合成*單參數*。這樣一來,庫文件就是鏈接器的一個單獨的參數,當你使用**庫目標**時,它會自動生成:'target_link_libraries(exe1「-Wl,-whole-archive」lib1「-Wl, -no-全檔案「)'。 (行情僅用於清醒,他們可以安全地省略)。 – Tsyvarev
@Tsyvarev,我的意思是'target_link_libraries(exe1「-Wl,-whole-archive」lib1,lib2,lib3 ...「-Wl,-no-whole-archive」)'',而不僅僅是一個lib。 –
因此,在普通選項之間枚舉所有lib **目標**:'target_link_libraries(exe1「-Wl,-whole-archive」lib1 lib2 lib3「-Wl,-no-whole-archive」)''。 – Tsyvarev