CMake项目共享依赖项

我有

>共享库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 directory

06002

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”.它会导致相同的错误消息.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...