我通过附加的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})
但是,主要项目的构建比Catch从Git中检索的更早开始。 如何解决这个问题?我的cmake脚本有什么问题?
答案 0 :(得分:2)
我认为我有同样的问题,我做的是:
e.g.: set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
project(catch_builder CXX)
add_subdirectory(ext/catch)
替换为include(AddCatch)
它应该可以正常工作;)
答案 1 :(得分:2)
在您的情况下,ExternalProject_Add
执行的下载发生在_build_time,而不是在CMake运行时,因此在调用add_subdirectory
时,下载将不会发生。只需一点点工作,您就可以使用CMake的ExternalProject_Add
命令在CMake / configure时从github下载Catch,而不是在构建时。这意味着当您致电add_subdirectory
时它将出现。有一篇文章here展示了如何做到这一点(它使用GoogleTest作为示例,它链接到一个完全通用的实现,你应该能够直接用于你的情况)。一般方法是它创建一个小脚本,通过CMake的脚本模式调用,以强制立即发生ExternalProject_Add调用。