2011-12-23 106 views
2

我有一些target_link_libraries:cmake的target_link_libraries

add_library(x x.cc) 
target_link_libraries(x depX1 depX2 depX3) 
add_executable(exe exe.cc) 
target_link_libraries(exe x ${shared_lib1} ${shared_lib2}) 

導致成exe文件與X鏈接和x的依賴關係:depx1,depx2等 的問題是,shared_libs是x和的依賴性之間插x,這在g ++ 4.6中是不可接受的(它在舊版本中起作用)。

如何解決?我需要將共享庫放在編譯行的END處,就像我在CMakeLists.txt文件中指定的那樣。所以我不希望他們插入,我希望他們在編輯線末尾。還要注意,depx1,depx2 depx3等也有它們自己的依賴關係,所以我唯一需要的是共享庫出現在編譯行末尾。

如何用cmake做到這一點? 由於

--LATER EDIT2-- =>解決 這可以通過使用一個醜陋劈解決:

add_custom_command(TARGET TargetName 
        PRE_LINK COMMAND ${PROJECT_SOURCE_DIR}/custom_script.sh 
        ARGS ${PROJECT_BINARY_DIR}/src/TargetName/CMakeFiles/TargetName.dir/link.txt) 

其中SRC /的TargetName/CMakeFiles/TargetName.dir/link.txt是鏈路命令行CMake生成和custom_script.sh是一個腳本,用於解析文件並在編譯行末尾安排動態鏈接庫。

--LATER EDIT--
所以我明白,使用當前的CMake,無法將共享庫放在編譯行的末尾,並且使用g ++ 4.6,一切都會中斷!這太棒了 !

+0

能告訴你的輸出'讓VERBOSE = 1',看看到底是什麼問題? – 2011-12-23 10:29:17

+0

嗨,輸出如下所示:/ usr/bin/C++ -g -O2 -Wall -pthread -static x -shared_lib1 -shared_lib2 depX2 depX3。我希望shared_lib1和shared_lib2位於編譯行末尾 – FlorinP 2011-12-23 12:32:07

+0

如果你指定你想要一個靜態庫,如:'add_library(x STATIC x.cc)'?另外,嘗試使用兩個對'target_link_libraries'的調用,一個使用x,另一個使用共享庫。 – 2011-12-23 14:48:03

回答

0

您是否試圖重複x依賴關係?例如:

target_link_libraries(EXE X depX1 depX2 depX3 $ {shared_lib1} $ {} shared_lib2)

+0

這不是一個選項,因爲depX1,depX2,depX3也有依賴關係,它會產生很長的字符串,這很難維護。我已經解釋過了。 – FlorinP 2011-12-29 09:36:33