cmake:ExternalProject_Add() 不应用 cmake 参数

Posted

技术标签:

【中文标题】cmake:ExternalProject_Add() 不应用 cmake 参数【英文标题】:cmake: ExternalProject_Add() does not apply cmake arguments 【发布时间】:2018-10-01 13:31:11 【问题描述】:

在我的 cmake 文件中构建外部库 (glfw) 时遇到问题:

[...]

ExternalProject_Add(glfw
    PREFIX "$CMAKE_CURRENT_SOURCE_DIR/glfw"
    URL "https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip"
    URL_HASH SHA256=b7d55e13e07095119e7d5f6792586dd0849c9fcdd867d49a4a5ac31f982f7326
    CMAKE_ARGS "-DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF"
    INSTALL_COMMAND ""
    TEST_COMMAND ""
)

add_executable(test main.cpp)
add_dependencies(test glfw)

虽然这很好用,但给定的 cmake 参数 -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF 会被忽略。

根据glfw documentation,参数应该禁用构建示例和测试。我只想构建库(目标:glfw)。

如果我尝试单独构建库

cmake -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF

然后它按预期工作。

我也研究了cmake documentation,但我无法更进一步。

我做错了吗?您可以选择构建或不构建哪个目标吗?

【问题讨论】:

【参考方案1】:

参数CMAKE_ARGS 包含一个列表 选项,而不是带有空格分隔 选项的单个字符串。正确:

CMAKE_ARGS -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF

【讨论】:

效果很好!谢谢。我认为在这种情况下,字符串和“列表”将是相同的。但又一次学到了一些新东西。

以上是关于cmake:ExternalProject_Add() 不应用 cmake 参数的主要内容,如果未能解决你的问题,请参考以下文章

链接到 CMAKE 中的 ExternalProject_add 依赖项

CMake 使 add_library 依赖于 ExternalProject_Add

ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法

CMake ExternalProject_Add 中的 URL 问题

cmake:下载easylogging++,直接使用源码

CMake:如何构建外部项目并包含其目标