gpt4 book ai didi

c++ - 使用FetchContent_处理嵌套的cmake项目

转载 作者:行者123 更新时间:2023-12-02 10:38:30 28 4
gpt4 key购买 nike

我正在寻找自动化给定c++库(在这种情况下为cpprestsdk)的编译方法。我正在寻找使用cmake构建库。
像许多其他项目一样,它也具有依赖性。即,它需要OpenSSL,Boost,ZLIB和websocketpp。

我正在寻找一种提供CMakeLists文件的方法,该文件将获取并构建所有先决条件,并允许cpprestsdk进行构建,而不必在计算机上预先安装库。

我获取cpprestsdk的方式如下:

FetchContent_Declare(cpprestsdk
GIT_REPOSITORY https://github.com/microsoft/cpprestsdk.git
GIT_TAG master)
FetchContent_GetProperties(cpprestsdk)
if(NOT cpprestsdk_POPULATED)
FetchContent_Populate(cpprestsdk)
add_subdirectory(${cpprestsdk_SOURCE_DIR} ${cpprestsdk_BINARY_DIR})
endif()

当然,由于这不会填充其自身的依赖关系,因此将无法构建。尽管websocketpp具有嵌入式版本,但仅在未找到版本时才使用。因此,我将以它为例。
FetchContent_Declare(websocketpp
GIT_REPOSITORY https://github.com/zaphoyd/websocketpp.git
GIT_TAG master
)

FetchContent_GetProperties(websocketpp)

if(NOT websocketpp_POPULATED)
FetchContent_Populate(websocketpp)
add_subdirectory(${cpprestsdk_SOURCE_DIR} ${cpprestsdk_BINARY_DIR})
endif()

这将获取websocketpp,但由于它只是配置阶段,因此不会构建任何内容。因此,cpprestsdk将无法找到依赖关系,而是回退到嵌入式发行版。

因此,我的问题是:在获取软件包后,有什么方法可以强制构建?还是在配置阶段删除库要求?我认为这可以使用ExternalProject来实现,但是我不太确定该如何设置。

最佳答案

您在寻找ExternalProject_add

我经常使用这种方法来构建外部项目,它为我提供了对插入项目中的外部项目的自动控制。

您可以这样添加:

ExternalProject_add(cpprestsdkDownload    
GIT_REPOSITORY https://github.com/microsoft/cpprestsdk
GIT_TAG master
CMAKE_ARGS
-DWERROR:BOOL="0"
-DBUILD_SAMPLES:BOOL="0"
-DBUILD_TESTS:BOOL="0" )

您可以使用自定义的configure,build和install命令来!玩得开心 !

关于c++ - 使用FetchContent_处理嵌套的cmake项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57394237/

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