c++ - 如何一次删除 `cmake -D` 定义的所有变量?

标签 c++ cmake

如何删除 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)

  • 如何删除 -D 定义的所有变量一次选择?
  • 最佳答案

    使用 cmake -D 时用于定义缓存变量的命令行选项,它们被放置在 CMakeCache.txt文件,以及所有其他 CMake 定义的缓存变量。要列出所有缓存的变量,可以运行 cmake -LAH .以 CMAKE_ 为前缀的变量由 CMake 在内部设置和使用。当你运行时:

    cmake -U* ..
    

    你删除 全部 缓存的变量,包括这些关键的 CMAKE_变量。这会使您的 CMake 项目构建处于损坏状态。 cmake -U 的文档选项甚至对此发出警告:

    Use with care, you can make your CMakeCache.txt non-working.



    没有特殊的方法可以仅删除用户通过 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_* ..
    

    关于c++ - 如何一次删除 `cmake -D` 定义的所有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61757153/

    相关文章:

    c# - 如何将指针从 C# 传递到 DLL 中的 native 函数?

    c++ - 使用继承而不是 typedef 来实现前向可声明性和回调带来的复杂性

    c++ - Codelite 调试器错误 : Failed to locate gdb! 在 '/usr/bin/gdb'

    macros - 跨 CMakeLists 的 CMake 宏

    ubuntu - CMake:错误的构建目标目录

    c++ - 在CMAKE中设置CMAKE_RUNTIME_OUTPUT_DIRECTORY后无法启动程序

    c++ - 根据模板参数有条件地定义模板类的构造函数

    c++ - 如何使用堆栈C++以相反的顺序读取文件和打印

    c++ - VSCode c++ 为 vc 工具链配置

    c++ - 未定义对函数 CMake 的引用