我的工作区结构如下
workspace
library1
library2
library3library3依赖于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.发布于 2017-12-21 03:42:02
我个人会这样做,在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_dependencies( \[\]...)来确保依赖项目标在当前目标之前构建,而不是调用相对路径add_subdirectory()调用。
因此,在library3/CMakeLists.txt中,在add_library/add_executable和target_link_libraries调用(如果适用)之后添加:
add_dependencies(library3 general path/to/library2 general path/to/library1
作为一个例子。
https://stackoverflow.com/questions/47912477
复制相似问题