我有: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