【发布时间】:2017-12-14 11:27:24
【问题描述】:
TLDR:我想请 CMake 等待 ExternalProject_Add 完成,然后它会尝试移动到下一个子目录并构建一个恰好使用其中一个文件的库外部项目。换句话说,我喜欢将外部项目声明为共享库的依赖项。
更多说明:
假设我的 CMake 项目有两个目录:thirdparty 和 src。我的顶级CMakeLists.txt 文件有:
add_subdirectory(thirdparty)
add_subdirectory(src)
thirdparty/CMakeLists.txt 包含多个ExternalProject_Add 命令。我的初衷是拉动和构建所有这些外部项目,然后继续在src 中构建我自己的库和可执行文件。不幸的是,这并没有按我的计划进行:
我的一个外部项目名为libsvm。我的src/CMakeLists.txt 有以下内容:
set(Libsvm_SOURCE_FILES
${PROJECT_BINARY_DIR}/thirdparty/libsvm/src/libsvm/svm.cpp
)
include_directories(
${Libsvm_INCLUDE_DIR}
)
add_library(
mysvm
SHARED
${Libsvm_SOURCE_FILES}
)
现在我面临的问题是 CMake 无法找到 ${Libsvm_SOURCE_FILES},显然是因为这一步是在我的 thirdparty/CMakeLists.txt 文件中的 ExternalProject_Add 执行之前执行的。
我想将此外部项目声明为该库的依赖项。
更广泛的问题: 有没有一种干净的方法可以强制 CMake 在进入下一个子目录之前完成第一个子目录中的所有内容?如果没有,您是否建议我对 CMakeLists 文件的层次结构和组织进行任何更改?
谢谢!
【问题讨论】: