>共享库X,它是独立的
>使用X的共享库Y.
>一个可执行的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): The binary directory
06001
is already used to build a source directory. It cannot be used to
build source directory06002
Specify a unique binary directory name.
我也试过尝试创建一个本地构建目录,所以对于例如将有libY / build / deps-libX /包含已配置和构建的库X(当从Y使用时),并且Z具有X和Y两者.
不幸的是,接下来我碰到了:
add_library cannot create target “X” because another target with
the same name already exists. The existing target is a shared
library created in source directory
“libX”. See
documentation for policy CMP0002 for more details.
使用ExternalProject不是一个选项.
其他人的另一个答案:由于合并“错误”,我收到此错误.在一个较大的项目中,在合并之后,CMakeLists.txt在同一个子目录中两次调用“add_subdirectory”.它会导致相同的错误消息.