gpt4 book ai didi

c++ - 如何使用 CMake 构建和链接外部 CMake 依赖项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:55 25 4
gpt4 key购买 nike

我想使用以下第三方库: https://github.com/Corvusoft/restbed

我想创建一个类似这样的文件夹结构:

- root
- CMakeLists.txt
- src
- third_party
- restbed
- src
- CMakeLists.txt
- CMakeLists.txt

我发现我应该使用 ExternalProject CMake 模块来实现这一点,但我似乎无法正确地做到这一点。出于某种原因,当我使用根 CMakeLists.txt 生成外部库(restbed)的源代码时,它没有出现在我的 XCode 项目中。此根 CMakeLists.txt 包含在 third_party 文件夹的 CMakeLists.txt 中。 third_party 文件夹的 CMakeLists.txt 如下所示:

include(ExternalProject)

# CMAKE_CURRENT_LIST_DIR -> third_party folder
set(RESTBED_DIR ${CMAKE_CURRENT_LIST_DIR}/restbed)

ExternalProject_Add(restbed
PREFIX ${RESTBED_DIR}
SOURCE_DIR ${RESTBED_DIR}
CMAKE_ARGS -DBUILD_SSL=NO
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
BUILD_COMMAND cmake ..
BINARY_DIR ${RESTBED_DIR}/build
INSTALL_DIR ${RESTBED_DIR}/distribution
INSTALL_COMMAND make install
)

set(RESTBED_INCLUDE_DIR ${RESTBED_DIR}/distribution/include)
set(RESTBED_LIB_DIR ${RESTBED_DIR}/distribution/lib)

add_library(librestbed IMPORTED STATIC)
add_dependencies(librestbed restbed)

在此之后,我想使用 target_include_dirtarget_link_librarieslibrestbed 添加为我的根项目的依赖项。在此之后,当我构建我的 XCode 项目时没有任何反应,外部库将不会构建。我究竟做错了什么?我不想使用内置的 CMake git 功能,因为我想将我的外部依赖项作为 git 子模块存储在第三方库中。我不想让 CMake 弄清楚它是否需要重新下载给定的依赖项。提前致谢!

最佳答案

我认为您混淆了 BUILD_COMMAND 选项和 CONFIGURE_COMMAND 选项。 cmake .. 应该放在选项 CONFIGURE_COMMAND 之后。

ExternalProject_Add(restbed
PREFIX ${RESTBED_DIR}
SOURCE_DIR ${RESTBED_DIR}
CMAKE_ARGS -DBUILD_SSL=NO
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
CONFIGURE_COMMAND cmake ..
BINARY_DIR ${RESTBED_DIR}/build
INSTALL_DIR ${RESTBED_DIR}/distribution
INSTALL_COMMAND make install
)

根据 documentation ,这些命令中的每一个都有默认值,因此您可能根本不必指定 CONFIGURE_COMMAND。例如,对于 BUILD_COMMAND:

If this option is not given, the default build command will be chosen to integrate with the main build in the most appropriate way (e.g. using recursive make for Makefile generators or cmake --build if the project uses a CMake build).

此外,如果您确实指定了 CONFIGURE_COMMAND,您可能会将传递给它的参数扩展为如下内容:

    ...
CONFIGURE_COMMAND cd restbed && mkdir build && cd build && cmake ..
...

关于c++ - 如何使用 CMake 构建和链接外部 CMake 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58224276/

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