CMAKE :我只想构建一个可下载的外部项目的一部分
我想使用的外部项目具有以下结构:
- ExternalProject
- Subproject A <- this i care for
- Subproject B
所有这些都在可供下载的同一个存档中。问题是,子项目B有更多的依赖项,我不希望在我的项目中,而且它与我正在做的事情无关。这些子项目是可以自己构建的,所以现在我把子项目A从归档文件中拿出来,放到我的主要项目中,这个项目运行得很好,但是我不想用我的项目部署外部项目,而是允许用户在运行cmake时自己下载外部项目。遗憾的是,每个子项目都没有单独的存档,所以我只能下载完整的外部项目。
我想要的是告诉CMAKE下载并解压缩整个存档ExternalProject,但只向我的项目添加子项目A。我阅读了关于ExternalProject_add的所有文档,但是它主要允许对项目的构建参数进行详细的配置。也许我只是寻找错误的关键字,我的问题真的很简单的回答-或者这是不可能的。
如果有人能给我指点正确的方法,我会非常感激的。
实际项目:上述档案有两个子文件夹"octomap“和"octovis”。octomap是我想要构建的,而如果不满足依赖项,octovis将产生很多错误。
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}"
)
发布于 2014-07-02 03:50:48
可以显式定义所有命令。例如,您有一个目录结构:
FooBar/
- CMakeLists.txt
- Foo/
- - CMakeLists.txt # You wanna build
- Bar/
- - CMakeLists.txt # You wanna ignore
使用硬编码路径的示例:
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
)
更新
请注意,这样修补父项目要容易得多:
# 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了:
ExternalProject_Add(
FooBar
URL "your-url-here"
CMAKE_ARGS -DBUILD_BAR_SUBPROJECT=OFF "-DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_DIR}"
)
https://stackoverflow.com/questions/24527656
复制相似问题