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 项目的智能方法