- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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 项目,它就可以很好地工作。我很乐意对非 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
?我正在考虑在 fetchcontent 之后使用 ExternalProject_Add
,但是 fetchcontent 似乎没用(ExternalProject 也可以下载 git repo)。此外,我想在配置时使用 botan 的一些目标(如果有意义的话)。
最佳答案
我遇到了同样的问题。由于 Botan 库在内部不使用 CMake 构建系统,因此我们无法使用 Botan“目标”。但是可以在 CMake 配置时构建 Botan 库并使用库和头文件。这是我的解决方案(最小配置,仅适用于 MS Visual Studio):
cmake_minimum_required (VERSION 3.20)
if(WIN32)
if(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Release"))
message(FATAL_ERROR "This configuration only works for a Release build")
endif()
# set paths
set(BOTAN_LIB_ROOT_DIR "${CMAKE_SOURCE_DIR}/external/botan")
set(BOTAN_LIB_REPOS_DIR "${BOTAN_LIB_ROOT_DIR}/repos")
set(BOTAN_LIB_FCSTUFF_DIR "${BOTAN_LIB_ROOT_DIR}/cmake-fetchcontent-stuff")
set(BOTAN_LIB_INSTALL_DIR "${BOTAN_LIB_ROOT_DIR}-install")
# download and unpack Botan library
include(FetchContent)
FetchContent_Declare(
botan
GIT_REPOSITORY https://github.com/randombit/botan.git
GIT_TAG 2.19.1
PREFIX ${BOTAN_LIB_FCSTUFF_DIR}
SOURCE_DIR ${BOTAN_LIB_REPOS_DIR}
)
set(FETCHCONTENT_QUIET OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(botan)
# find Python3 Interpreter and run build, testing and installation
if(${botan_POPULATED} AND MSVC AND NOT EXISTS "${BOTAN_LIB_INSTALL_DIR}/lib/botan.lib")
find_package(Python3 COMPONENTS Interpreter)
if(NOT ${Python3_Interpreter_FOUND})
message(FATAL_ERROR "Python3 Interpreter NOT FOUND")
endif()
execute_process(
COMMAND ${Python3_EXECUTABLE} configure.py --cc=msvc --os=windows --prefix=${BOTAN_LIB_INSTALL_DIR}
WORKING_DIRECTORY ${BOTAN_LIB_REPOS_DIR}
COMMAND_ECHO STDOUT
)
execute_process(
COMMAND nmake
WORKING_DIRECTORY ${BOTAN_LIB_REPOS_DIR}
COMMAND_ECHO STDOUT
)
execute_process(
COMMAND nmake check
WORKING_DIRECTORY ${BOTAN_LIB_REPOS_DIR}
COMMAND_ECHO STDOUT
)
execute_process(
COMMAND nmake install
WORKING_DIRECTORY ${BOTAN_LIB_REPOS_DIR}
COMMAND_ECHO STDOUT
)
endif()
endif()
add_executable (main "main.cpp")
if(WIN32)
target_include_directories(main PUBLIC "${BOTAN_LIB_INSTALL_DIR}/include/botan-2")
target_link_libraries(main PUBLIC "${BOTAN_LIB_INSTALL_DIR}/lib/botan.lib")
configure_file("${BOTAN_LIB_INSTALL_DIR}/bin/botan.dll"
"${CMAKE_CURRENT_BINARY_DIR}/botan.dll"
COPYONLY
)
install(TARGETS main DESTINATION bin)
install(FILES "${BOTAN_LIB_INSTALL_DIR}/bin/botan.dll" DESTINATION bin)
endif()
关于c++ - FetchContent 与 ExternalProject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65232395/
使用 FetchContent 下载 git 存储库时,是否有某种方法可以显示下载进度? 我试图清除 FETCHCONTENT_QUIET ,但它什么也没做。我不知道这是否可能。 最佳答案 说明:看g
我正在使用 Cmake 构建一个项目并使用 FetchContent 来管理依赖项。由于多种原因,我不能依赖系统范围内安装的包,所以这个包有很大帮助。它允许我做这样的事情: cmake_minimum
我开始使用 FetchContent 自动下载外部依赖项。与旧方法相比,它工作得很好,但我有一个问题可能与 FetchContent 本身无关 - 外部依赖项被多次下载。我实际上是为 Android
我在内部创建了多个静态库,这些库链接到图像中。 我想使用通过使用 FetchContent_Declare 检索的外部库. proj /lib1 CMakeList.txt /lib2
我正在使用 CMake FetchContent 下载并构建第三方库(在本例中为 realsense2)。在尝试了官方文档 (https://cmake.org/cmake/help/v3.11/mo
我有一个 C/C++ 项目,我想在其中使用 CppUTest。所以我将 CppUTest 的依赖包括在内: include(FetchContent) FetchContent_Declare(
NO_SYSTEM_FROM_IMPORTED告诉我们 IMPORTED 目标自动获取 -isystem。这是否也适用于使用 FetchContent 引入项目的目标? ? 如果不是(我假设是因为在获
全部。 我决定使用新的 cmake 宏来下载外部依赖项。 我从 Catch2 库的文档中获取了示例代码。 include(FetchContent) FetchContent_Declare(
我试图在点击事件后让“保存”按钮提醒,但我没有成功。 Perfil.html Profile.html 不是主页。它是仪表板的一部分。 Informações
我当前的项目需要一个使用 Makefile 构建的库。我想在我的项目编译期间编译这个库;此功能是 FetchContent 的主要卖点,它与 CMake 依赖项配合得很好。然而,我无法让它与 Make
我当前的项目需要一个使用 Makefile 构建的库。我想在我的项目编译期间编译这个库;此功能是 FetchContent 的主要卖点,它与 CMake 依赖项配合得很好。然而,我无法让它与 Make
在 Ubuntu 上执行 cmake 命令时出现以下错误。 CMake 版本 - 3.10.2。 mapp@ubuntu:~/Desktop/LocatePro$ cmake . -- Enabl
我有一个需要使用两个库的小项目,即 ASIO(独立)和 nlohmann/json。 将 json 库添加到我的 CMake 项目非常简单: include(FetchContent) FetchCo
我正在尝试使用 CMAKE 构建 libpng,但它需要 zlib,因此我正在尝试同时构建它们但没有任何运气。我喜欢 FetchContent,因此我可以指定 GIT_TAG 并在将来需要时轻松更新它
我是一名优秀的程序员,十分优秀!