我使用CMAKE來構建一個由許多庫和可執行文件組成的相當大的項目。我如何指定庫庫依賴關係存在問題,並且事情不能按需要完全工作。示意圖我的項目如下所示:CMAKE - 解決項目中圖書館之間的依賴關係
CMakeLists.txt
lib1/src/CMakeLists.txt
lib2/src/CMakeLists.txt
app/src/CMakeLists.txt
I.e.我有兩個庫lib1和lib2,其中lib2依賴於lib1,應用程序依賴於lib1和lib2。我建庫使用共享和靜態鏈接:
add_library(lib1_static STATIC lib1_src)
add_library(lib1_shared SHARED lib1_src)
set_target_properties(lib1_static PROPERTIES OUTPUT_NAME lib1)
set_target_properties(lib1_shared PROPERTIES OUTPUT_NAME lib2)
爲了確保dependies滿意我有target_link_libraries()爲:
#lib2/src/CMakeLists.txt:
target_link_libraries(lib2_shared lib1_shared)
target_link_libraries(lib2_static lib1_static)
而對於應用程序:
#app/src/CMakeLists.txt
target_link_libraries(app_static lib2_static) # <- No explicit dependance on lib1
target_link_libraries(app_shared lib2_shared)
現在 - 問題是,當我重新編譯時,它編譯了相當長的時間,但是在創建liblib2.so文件時,錯誤消息:
make[2]: *** No rule to make target 'lib1/src/liblib1.so' needed by 'lib2/src/liblib2.so'. Stop.
出現。如果我只是發出一個新的make命令 - 事情將會成功。所以看來我沒有設法正確配置依賴關係?需要注意的是,從第一內建嘗試輸出廠名顯示:
Linking C shared library liblib1.so
所以構建本身suceeded - 但它似乎是一個版本將無法使用此建實例期間創建的liblib1.s0文件來解決LIB2依賴?
我試過了 - 再次移除 - 幾個varietes的link_directories()和target_depends()沒有成功。
感謝您的任何提示?
喬金 -
好的 - 謝謝你的回答;正如前面提到的,我通過升級CMake來解決它。但我確實感覺到我的CMakeLists.txt中的整個靜態/共享處理非常複雜 - 所以也許我可以按照你的建議來簡化它。 – user422005 2012-02-07 07:51:06