【发布时间】:2014-07-14 14:52:31
【问题描述】:
我有:
- 一个共享库 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 在项目 Y 中只是“X”,在项目 Z 中是“X Y”。
这适用于项目 Y,但在项目 Z 中,我得到:
CMake Error at ... (add_subdirectory): 二进制目录
.../libX/build已用于构建源目录。它不能用于 构建源码目录
.../libX指定一个唯一的二进制目录名。
我也尝试创建一个本地构建目录,例如会有 libY/build/deps-libX/ 包含配置和构建的库 X(当从 Y 使用时),并且 Z 对 X 和 Y 都有这个。 不幸的是,接下来我遇到了:
add_library 无法创建目标“X”,因为另一个目标 同名已经存在。现有目标是共享的 在源目录中创建的库 “libX”。看 有关详细信息,请参阅政策 CMP0002 的文档。
使用 ExternalProject 不是一种选择。
【问题讨论】:
-
我最终使用了stackoverflow.com/a/11217008/128240 中详述的解决方案。
标签: cmake