首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake如何避免递归add_subdirectory?

CMake如何避免递归add_subdirectory?
EN

Stack Overflow用户
提问于 2017-12-21 02:43:40
回答 1查看 1.8K关注 0票数 1

我的工作区结构如下

代码语言:javascript
复制
workspace
  library1
  library2
  library3

library3依赖于library2library1

library2依赖于library1

library3 CMakeLists.txt中

代码语言:javascript
复制
cmake_minimum_required (VERSION 3.9)
add_subdirectory(../library2 ${CMAKE_CURRENT_SOURCE}/../library2/build)
add_subdirectory(../library1 ${CMAKE_CURRENT_SOURCE}/../library1/build)

library2 CMakeLists.txt中

代码语言:javascript
复制
cmake_minimum_required (VERSION 3.9)
add_subdirectory(../library1 ${CMAKE_CURRENT_SOURCE}/../library1/build)

library2中的cmake会抛出一个错误,指出library1/build已经包含cmake文件。

代码语言:javascript
复制
CMake Error at C:/Users/me/workspace/Library2/CMakeLists.txt:12 (add_subdirectory):
  The binary directory

    C:/Users/me/workspace/Library1/build

  is already used to build a source directory.  It cannot be used to build
  source directory

    C:/Users/me/workspace/Library1

  Specify a unique binary directory name.
EN

回答 1

Stack Overflow用户

发布于 2017-12-21 03:42:02

我个人会这样做,在workspace中,我有一个根CMakeList.txt文件来设置项目:

代码语言:javascript
复制
# Set the minimum version of cmake required
cmake_minimum_required(VERSION 3.9)
project(MyProject)
add_subdirectory(library1)
add_subdirectory(library2)
add_subdirectory(library3)

(这就是您真正需要的,您的根CMakeLists.txt文件根本不需要很长)。

然后,对于需要依赖项的库,使用add_dependencies( \[\]...)来确保依赖项目标在当前目标之前构建,而不是调用相对路径add_subdirectory()调用。

因此,在library3/CMakeLists.txt中,在add_library/add_executabletarget_link_libraries调用(如果适用)之后添加:

add_dependencies(library3 general path/to/library2 general path/to/library1

作为一个例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47912477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档