首页 > 解决方案 > 如何一次删除由 `cmake -D` 定义的所有变量?

问题描述

如何一次删除由定义的所有变量cmake -D

例如,我定义FOOBAR使用:

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)

标签: c++cmake

解决方案


使用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_* ..

推荐阅读