gpt4 book ai didi

c++ - 是否可以使用 FetchContent 或等效项通过 CMake 添加没有 CMakeLists.txt 的库?

转载 作者:行者123 更新时间:2023-12-04 11:30:09 34 4
gpt4 key购买 nike

我有一个需要使用两个库的小项目,即 ASIO(独立)和 nlohmann/json。
将 json 库添加到我的 CMake 项目非常简单:

include(FetchContent)

FetchContent_Declare(json
GIT_REPOSITORY https://github.com/ArthurSonzogni/nlohmann_json_cmake_fetchcontent
GIT_TAG v3.9.1)

FetchContent_GetProperties(json)
if(NOT json_POPULATED)
FetchContent_Populate(json)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
但是,由于 ASIO 没有 CMakeLists.txt,它似乎不起作用。
是否有解决方法,或者我是否绝对需要在外部安装 ASIO?
可能值得一提的是,这两个库都只有头文件,所以我只需要 cmake 来获取库并添加适当的包含路径。

最佳答案

FetchContent 也可以处理非 CMake 项目。查看完整文档 here尤其是第一句话,它指出它可以“通过 ExternalProject 模块支持的任何方法”处理项目。
在 asio 的情况下,它是一个仅 header 的库,它非常简单,因为您只需要告诉 FetchContent 没有“配置”和“构建”步骤。

FetchContent_Declare(asio
GIT_REPOSITORY git@github.com:chriskohlhoff/asio.git
GIT_TAG master
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
)
这将只下载填充步骤中的源代码。
现在您可以设置 asio用类似的东西瞄准自己
add_library(asio INTERFACE)
target_include_directories(asio INTERFACE ${asio_SOURCE_DIR}/asio/include)
find_package(Threads)
target_link_libraries(asio INTERFACE Threads::Threads)
这是我用来构建的完整 CMakeLists.txt the first example from the asio tutorial .
cmake_minimum_required(VERSION 3.14.7)

project(sample LANGUAGES CXX)

include(FetchContent)

FetchContent_Declare(asio
GIT_REPOSITORY git@github.com:chriskohlhoff/asio.git
GIT_TAG master
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
)

FetchContent_GetProperties(asio)
if(NOT asio_POPULATED)
FetchContent_Populate(asio)
endif()

add_library(asio INTERFACE)
target_include_directories(asio INTERFACE ${asio_SOURCE_DIR}/asio/include)
find_package(Threads)
target_link_libraries(asio INTERFACE Threads::Threads)

add_executable(example example.cc)
target_link_libraries(example asio)

关于c++ - 是否可以使用 FetchContent 或等效项通过 CMake 添加没有 CMakeLists.txt 的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65586352/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com