2

我正在使用 Cmake 构建一个项目并用于FetchContent管理依赖项。由于几个原因,我不能依赖系统范围内安装的包,所以这个包有很大帮助。它允许我做这样的事情:

cmake_minimum_required(VERSION 3.14)
project(dummy LANGUAGES C CXX)
include(FetchContent)
FetchContent_Declare(nlohmann
    GIT_REPOSITORY https://github.com/onavratil-monetplus/json
    GIT_TAG v3.7.3
)
FetchContent_MakeAvailable(nlohmann)

add_executable(dummy main.cpp)
target_link_libraries(dummy PUBLIC nlohmann_json::nlohmann_json)

现在只要 repo 是一个带有CMakeLists.txt. 我很想对非 cmake 项目使用类似的方法,例如 Botan 库。显然

FetchContent_Declare(botan
    GIT_REPOSITORY https://github.com/onavratil-monetplus/botan
    GIT_TAG 2.17.2
)
FetchContent_MakeAvailable(botan)

并没有真正完成这项工作,构建没有运行,因为它不是一个 cmake 项目。有人会考虑添加

  CONFIGURE_COMMAND "<SOURCE_DIR>/configure.py --prefix=<BINARY_DIR>"
  BUILD_COMMAND "cd <SOURCE_DIR> && make"

或类似于 declare 命令的东西,但FetchContent文档明确表示这些特定参数在传递给FetchContent.

FetchContent现在斗争是显而易见的——在这种情况下如何正确使用?我正在考虑ExternalProject_Add在 fetchcontent 之后使用,但是 fetchcontent 似乎没用(ExternalProject 也可以下载 git repo)。此外,我想在配置时使用 botan 的一些目标(如果有意义的话)。

4

0 回答 0