2011-04-17 34 views
9

我有一個可執行文件,它由幾個目標文件構建而成,並與幾個靜態庫和共享庫鏈接。我想爲鏈接庫之一指定-Wl​​,-whole-archive連接器選項。在鏈接可執行文件時只指定一個靜態庫的鏈接標記

例如,從這個命令:

/usr/bin/c++ _objectFiles_ -o _myExec_ _someCommonOptions_ _myLibraries_ -Wl,-rpath _path to libs_ 

我想這個命令:

/usr/bin/c++ _objectFiles_ -o _myExec_ _someCommonOptions_ _allOtherLibs_ \ 
    -Wl,-whole-archive _one particular lib_ -Wl,-no_whole-archive -Wl,-rpath _path to libs_ 

這是任何方法可以讓我實現這個使用cmake?據我瞭解,當我添加類似

set_target_properties(myExec PROPERTIES LINK_FLAGS "-Wl,-whole-archive") 

然後-whole-archive選項設置爲所有的鏈接庫,這絕對不是我想要的。

謝謝。

回答

27

此線程Linking static libraries into shared libs?有一個方法。

SET (MYLIB -Wl,--whole-archive my_particular_lib -Wl,--no-whole-archive) 
.... 
TARGET_LINK_LIBRARIES(yourtarget ${normalstuff} ${MYLIB} ${othernormalstuff}) 

CMake docs狀態:

如果庫名稱匹配的 在項目 依存度將自動生成系統被添加 以確保 庫的另一個目標被鏈接在目標鏈接之前是最新的 。項目名稱 以' - '開頭,但不是'-l'或 '-framework',被視爲鏈接器 標誌。

因此,-Wl選項不應該干擾CMake。

+0

它幫助!謝謝! – beduin 2011-04-17 12:58:47