c++ - cmake:在主 cmakelists 中使用之前从 git 检索库

标签 c++ git cmake

我通过附加的 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/

相关文章:

c++ - 如何遍历 vector 中包含的字符串?

c++ - 对于(x :y) loop isnt working properly in c++

git - 如何忽略存储库中的文件?

CMake target_link_libraries 接口(interface)依赖项

c++ - Clang 模糊调用(int、float、double)

c++ - 需要有关 Dissection C++ number 2 string function 的帮助

git - 如果我从 Github 中删除一个带有 fork 的 fork 会怎样?

android - 推送错误 : master: master [rejected non-fast-forward]

c++ - CMake 链接找不到库

CMakeLists.txt 中的 CMake 错误(target_link_libraries)