我的工作空间结构为
workspace
library1
library2
library3
library3
依赖于library2
和library1
library2
依赖于library1
在library3
CMakeLists.txt
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
cmake_minimum_required (VERSION 3.9)
add_subdirectory(../library1 ${CMAKE_CURRENT_SOURCE}/../library1/build)
library2
中的cmake抛出了library1/build
已经包含cmake文件的错误。
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.
我个人会为此类事做的是,在workspace
中,我有一个根CMakeList.txt文件来设置项目:
# 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_subdirectory()
调用,而是针对需要依赖关系的库,使用add_dependencies(<target> \[<target-dependency>\]...)
来确保在当前目标之前构建依赖关系目标。
所以在library3 / CMakeLists.txt里面,在你的add_library/add_executable
和target_link_libraries
调用之后(如果适用)添加:
add_dependencies(library3 general path/to/library2 general path/to/library1
举个例子。