c++ - 如何一次删除由 `cmake -D` 定义的所有变量?
问题描述
如何一次删除由定义的所有变量cmake -D
?
例如,我定义FOO
并BAR
使用:
cmake -DFOO=foo -DBAR=bar
运行时出现错误cmake -U* ../
,
CMake Error: File /Modules/CMakeSystem.cmake.in does not exist.
CMake Error at /usr/share/cmake-3.10/Modules/CMakeDetermineSystem.cmake:186 (configure_file):
configure_file Problem configuring file
Call Stack (most recent call first):
CMakeLists.txt:3 (project)
- 如何一次删除
-D
选项定义的所有变量?
解决方案
使用cmake -D
命令行选项定义缓存变量时,它们CMakeCache.txt
与所有其他 CMake 定义的缓存变量一起放置在文件中。要列出所有缓存的变量,您可以运行cmake -LAH
. 前缀为 的变量CMAKE_
由 CMake 在内部设置和使用。当你运行时:
cmake -U* ..
您删除所有缓存的变量,包括这些关键CMAKE_
变量。这会使您的 CMake 项目构建处于损坏状态。该cmake -U
选项的文档甚至对此发出警告:
小心使用,你可以让你的
CMakeCache.txt
非工作。
没有特殊的方法可以仅删除用户通过cmake -D
选项手动定义的那些缓存变量。您必须单独删除它们:
cmake -U FOO -U BAR ..
或者,您可以打开CMakeCache.txt
文件,然后从文件中手动删除它们。
另一种选择是简单地完全删除该CMakeCache.txt
文件,这将从头开始在您的项目上运行 CMake。
我建议为您的-D
命令行变量添加一个通用前缀(例如MYVAR_
)。
cmake -D MYVAR_FOO=foo -D MYVAR_BAR=bar ..
这样,在 CMake GUI 中查看时它们被整齐地分组,您可以使用通-U
配表达式从缓存中安全地删除所有它们:
cmake -U MYVAR_* ..
推荐阅读
- javascript - 为什么 phaser.js 显示整个 sprite-sheet 而不是它的单个帧?
- python - 以编程方式构建代理时,无法使用 webview 向浮士德代理/主题发送消息
- python - Pandas 和 Numpy 版本的问题
- telegram - 如何使用 python-telegram-bot 库从测验中识别用户答案
- python - 在 Python 中,如何在不更改输入数据的情况下用数字减去 x 轴标签
- javascript - Express.js 在单个导出的路由器对象中返回多个路由返回不正确的路由
- docker - 如何在 docker 中公开 .NET Framework 控制台应用程序端口?
- javascript - React Native useState onChangeText
- kotlin - Kotlin:编程正在打印 kotlin.unit
- javascript - 使用 Javascript 浏览 Vimeo 视频