首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAKE :只构建下载的外部项目的一个目录

CMAKE :只构建下载的外部项目的一个目录
EN

Stack Overflow用户
提问于 2014-07-02 09:35:25
回答 1查看 4.3K关注 0票数 1

CMAKE :我只想构建一个可下载的外部项目的一部分

我想使用的外部项目具有以下结构:

代码语言:javascript
复制
- ExternalProject
    - Subproject A  <- this i care for
    - Subproject B

所有这些都在可供下载的同一个存档中。问题是,子项目B有更多的依赖项,我不希望在我的项目中,而且它与我正在做的事情无关。这些子项目是可以自己构建的,所以现在我把子项目A从归档文件中拿出来,放到我的主要项目中,这个项目运行得很好,但是我不想用我的项目部署外部项目,而是允许用户在运行cmake时自己下载外部项目。遗憾的是,每个子项目都没有单独的存档,所以我只能下载完整的外部项目。

我想要的是告诉CMAKE下载并解压缩整个存档ExternalProject,但只向我的项目添加子项目A。我阅读了关于ExternalProject_add的所有文档,但是它主要允许对项目的构建参数进行详细的配置。也许我只是寻找错误的关键字,我的问题真的很简单的回答-或者这是不可能的。

如果有人能给我指点正确的方法,我会非常感激的。

实际项目:上述档案有两个子文件夹"octomap“和"octovis”。octomap是我想要构建的,而如果不满足依赖项,octovis将产生很多错误。

代码语言:javascript
复制
ExternalProject_Add(octomap-1.6.5
    URL https://github.com/OctoMap/octomap/archive/v1.6.5.tar.gz
    URL_MD5 de09b1189a03ac8cbe4f813951e86605
     SOURCE_DIR  ${CMAKE_CURRENT_SOURCE_DIR}/octomap/
    CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_DIR}"
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-02 11:50:48

可以显式定义所有命令。例如,您有一个目录结构:

代码语言:javascript
复制
FooBar/
        - CMakeLists.txt
        - Foo/
        -      - CMakeLists.txt # You wanna build
        - Bar/
        -      - CMakeLists.txt # You wanna ignore

使用硬编码路径的示例:

代码语言:javascript
复制
set(ext_dir "${CMAKE_BINARY_DIR}/third-party-activities/ExternalProject/")
set(foobar_dir "${ext_dir}/FooBar")

ExternalProject_Add(
    FooBar
    URL "your-url-here"
    SOURCE_DIR "${foobar_dir}/Source"
    CONFIGURE_COMMAND
        "${CMAKE_COMMAND}"
        "-H${foobar_dir}/Source/Foo"
        "-B${foobar_dir}/Builds"
        "-DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_DIR}"
    BUILD_COMMAND
        "${CMAKE_COMMAND}" --build "${foobar_dir}/Builds"
    INSTALL_COMMAND
        "${CMAKE_COMMAND}" --build "${foobar_dir}/Builds" --target install
)

更新

请注意,这样修补父项目要容易得多:

代码语言:javascript
复制
# FooBar/CMakeLists.txt
option(BUILD_BAR_SUBPROJECT "Build targets from subproject Bar" ON)
...
add_subdirectory(Foo)
if(BUILD_BAR_SUBPROJECT)
  add_subdirectory(Bar)
endif()

..。现在你不需要那么多地黑ExternalProject_Add了:

代码语言:javascript
复制
ExternalProject_Add(
    FooBar
    URL "your-url-here"
    CMAKE_ARGS -DBUILD_BAR_SUBPROJECT=OFF "-DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_DIR}"
)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24527656

复制
相关文章

相似问题

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