我正在使用 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 的一些目标(如果有意义的话)。