我有一些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,一切都會中斷!這太棒了 !
能告訴你的輸出'讓VERBOSE = 1',看看到底是什麼問題? – 2011-12-23 10:29:17
嗨,輸出如下所示:/ 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
如果你指定你想要一個靜態庫,如:'add_library(x STATIC x.cc)'?另外,嘗試使用兩個對'target_link_libraries'的調用,一個使用x,另一個使用共享庫。 – 2011-12-23 14:48:03