微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐