我有:CMake的項目共享依賴
- 共享庫X,它是獨立
- 共享庫Y,使用X
- 可執行Z,其使用X和Y
它們都有自己的CMakeLists.txt,可以獨立配置和構建。
但是,我無法使可執行文件(Z)的CMakeLists.txt正常工作。
我的做法是這樣的:
foreach(clib ${OWN_LIBS})
set(LIBS "${LIBS} ${clib}")
set(CLIB_DIR "${PROJECT_SOURCE_DIR}/../lib${clib}")
set(CLIB_BUILD_DIR "${CLIB_DIR}/build")
add_subdirectory("${CLIB_DIR}" "${CLIB_BUILD_DIR}")
include_directories("${CLIB_DIR}/incl")
link_directories("${CLIB_BUILD_DIR}")
endforeach(clib)
隨着OWN_LIBS是項目Ÿ只是 「X」,並在項目Z.是 「XY」
這適用於工程Y,但在項目Z,我得到:
CMake的錯誤在...(add_subdirectory):二進制目錄
.../libX/build
已用於構建源目錄。它不能被用來 編譯源代碼目錄
.../libX
指定一個唯一的二進制目錄名。
我也嘗試創建一個本地生成目錄,所以例如,將有立白/建造/ DEPS-了libx /包含配置和內置庫X(選自Y當使用時),和具有該兩個X Z和Y. 不幸的是,下一個I跑進:
add_library不能創建目標「X」,因爲具有 同名的另一個目標已經存在。現有目標是在源目錄 「libX」中創建的共享 庫。有關更多詳細信息,請參閱策略CMP0002的 文檔。
使用ExternalProject不是一個選項。
我最終最終使用了http://stackoverflow.com/a/11217008/128240上的解決方案。 – ShdNx
[CMake - 在同一個項目中的應用程序/庫之間的依賴關係(頭文件)]的可能重複(http://stackoverflow.com/questions/11216408/cmake-dependencies-headers-between-apps-libraries-in-same-project) – ShdNx