【问题标题】:Having CMake build, but not install, an external project让 CMake 构建但不安装外部项目
【发布时间】:2019-01-10 16:45:57
【问题描述】:

我正在尝试在我的 CMake 项目中使用这个外部项目;外部项目也是一个 CMake 项目。

现在,外部项目产生了静态库和一堆头文件;但是 - 我不希望将它们安装在任何地方,我只需要它们作为我的主项目的一部分构建东西(并且在构建和/或安装主项目之后不需要这些文件)。

如何让 CMake “获取、构建但不安装”外部项目?我在想我可能会通过强制一个空的安装命令来粗暴地做到这一点,但我确信有更好、更优雅的方式。

【问题讨论】:

  • 你知道 CMake 的命令 ExtrenalProject 吧? cmake.org/cmake/help/latest/module/ExternalProject.html
  • “我想我可能会通过强制一个空的安装命令来做这件事,但我确信有更好、更优雅的方法。” - 空INSTALL_COMMAND 选项是禁用安装步骤的真正方法。为什么你认为它是“hackish”?
  • @usr1234567:当然。这就是我正在使用的。
  • @Tsyvarev:因为 CMake 仍会尝试“安装”该项目。我希望它不要那样尝试。
  • ExternalProject 的文档说“将空字符串作为<cmd> 传递会使安装步骤不执行任何操作”。所以不太可能有其他方法。

标签: build cmake installation


【解决方案1】:

正如@Tsyvarev 所述,要跳过外部项目的安装,您可以简单地传递参数INSTALL_COMMAND "",这绝对是推荐的方法。

例如:

ExternalProject_Add(Foo
  GIT_REPOSITORY "git://github.com/Foo/Foo"
  GIT_TAG "123456"
  SOURCE_DIR ${CMAKE_BINARY_DIR}/Foo
  BINARY_DIR ${CMAKE_BINARY_DIR}/Foo-build
  CMAKE_CACHE_ARGS
    -DFOO_ENABLE_BAR:BOOL=1
  INSTALL_COMMAND ""
  )

然后您将使用-DFoo_DIR:PATH=${CMAKE_BINARY_DIR}/Foo 配置依赖的外部项目,以便find_package(Foo REQUIRED) 可以作为例外工作。为此,假设外部项目为构建树提供了一个工作配置文件。

要了解有关配置文件的更多信息,请参阅Correct way to use third-party libraries in cmake project

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多