我通过附加的 cmakelists.txt 从 github 获取 Catch 库,该库包含在主库中:
cmake_minimum_required(VERSION 3.2)
project(MyProject)
add_subdirectory(ext/catch)
include_directories(${CATCH_INCLUDE_DIR} ${CXXOPTS_INCLUDE_DIR} src)
...
Catch 的 CmakeLists.txt 位置:
cmake_minimum_required(VERSION 2.8.8)
project(catch_builder CXX)
include(ExternalProject)
find_package(Git REQUIRED)
ExternalProject_Add(
catch
PREFIX ${CMAKE_CURRENT_SOURCE_DIR}
GIT_REPOSITORY https://github.com/philsquared/Catch.git
TIMEOUT 10
UPDATE_COMMAND ${GIT_EXECUTABLE} pull
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
LOG_DOWNLOAD ON
)
# Expose required variable (CATCH_INCLUDE_DIR) to parent scope
ExternalProject_Get_Property(catch source_dir)
set(CATCH_INCLUDE_DIR ${source_dir}/include CACHE INTERNAL "Path to include folder for Catch")
message(${CATCH_INCLUDE_DIR})
但是,主项目的构建早于从 Git 检索 Catch 的时间。 如何解决这个问题?我的 cmake 脚本出了什么问题?
最佳答案
我想我也遇到了同样的问题,我所做的是:
- 将AddCatch.cmake(cmake的cmakelist)放入CMAKE_MODULE_PATH
例如:set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
- 删除行:
project(catch_builder CXX)
- 将
add_subdirectory(ext/catch)
替换为include(AddCatch)
它应该工作得很好;)
关于c++ - cmake:在主 cmakelists 中使用之前从 git 检索库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002112/