首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建和链接外部CMake依赖关系与CMake?

如何构建和链接外部CMake依赖关系与CMake?
EN

Stack Overflow用户
提问于 2019-10-03 17:37:34
回答 1查看 557关注 0票数 2

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

我想创建一个类似于此的文件夹结构:

代码语言:javascript
复制
- root
     - CMakeLists.txt
     - src
     - third_party
         - restbed
             - src
             - CMakeLists.txt
         - CMakeLists.txt

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

代码语言:javascript
复制
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功能,因为我希望将外部依赖项存储为third_party库中的git子模块。我不想让CMake知道它是否需要重新下载一个给定的依赖项。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 18:27:44

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

代码语言:javascript
复制
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
)

根据文档,每个命令都有缺省值,因此您可能根本不需要指定CONFIGURE_COMMAND。例如,对于BUILD_COMMAND

如果未给出此选项,则将选择默认的build命令以最适当的方式与主构建集成(例如,如果项目使用make生成,则使用递归CMake用于Makefile生成器或CMake)。

此外,如果确实指定了CONFIGURE_COMMAND,则可能会展开传递它的参数,如下所示:

代码语言:javascript
复制
    ...
    CONFIGURE_COMMAND cd restbed && mkdir build && cd build && cmake ..
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58224276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档