CMake 预设

CMakePresets.json 包含项目级构建的选项,而 CMakeUserPresets.json 包含局部构建的选项。

按照在 cmake-presets(7) 中描述的格式创建预设文件,并将它们存储在项目的根目录中。您可以在 项目 视图中查看它们。

Qt Creator 支持版本 5 的 configurebuild 预设(在 CMake 3.24 中引入),但不强制进行版本检查。如果存在,它会读取和使用版本 5 的所有字段。它不支持 test 预设。

您可以在第一次 打开项目 时导入预设,如果没有 CMakeLists.txt.user 文件或您已禁用项目中所有工具包的情况下。

{Opening a project that has CMake presets}

您可以在 初始配置 字段及其下面的环境配置字段中查看预设。

{CMake environment configuration}

要更新 CMakePresets.json 文件中的更改,请选择 构建 > 重新加载 CMake 预设,然后选择要加载的预设文件。

配置预设

以下配置预设指示 CMake 在平台上使用默认生成器,并指定所有构建类型的构建目录。在 初始参数 中显示 NOT_COMMON_VALUE,在环境配置字段中显示 AN_ENVIRONMENT_FLAG

{
  "version": 1,
  "configurePresets": [
    {
      "name": "preset",
      "displayName": "preset",
      "binaryDir": "${sourceDir}/build/preset",
      "cacheVariables": {
        "NOT_COMMON_VALUE": "NOT_COMMON_VALUE"
        },
      "environment": {
        "AN_ENVIRONMENT_FLAG": "1"
        }
      },
      "vendor": {
        "qt.io/QtCreator/1.0": {
           "AskBeforePresetsReload": false,
           "AskReConfigureInitialParams": false,
           "AutorunCMake": false,
           "PackageManagerAutoSetup": false,
           "ShowAdvancedOptionsByDefault": true,
           "ShowSourceSubFolders": false,
           "UseJunctionsForSourceAndBuildDirectories": true
           }
      }
  ]
}

有关 vendor 部分中 CMake 项目设置的更多信息,请参阅 为项目覆盖 CMake 设置

MinGW 示例

以下示例配置了具有以下功能的 Qt 项目:

  • MinGW 编译器
  • 构建目录 – <sourceDir>/build-release
  • 构建类型 – CMAKE_BUILD_TYPE发布
  • 生成器 – MinGW Makefiles
  • CMake 可执行文件的路径
  • 使用 CMAKE_PREFIX_PATH 的 Qt 安装路径
  • MinGW 11.2.0 64 位调试器 GNU gdb 11.2.0
{
  "version": 1,
  "configurePresets": [
    {
      "name": "mingw",
      "displayName": "MinGW 11.2.0",
      "generator": "MinGW Makefiles",
      "binaryDir": "${sourceDir}/build-release",
      "cmakeExecutable": "C:/Qt/Tools/CMake_64/bin/cmake.exe",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "CMAKE_PREFIX_PATH": "C:/Qt/6.4.0/mingw_64"
      },
      "environment": {
        "PATH": "C:/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
      },
      "vendor": {
        "qt.io/QtCreator/1.0": {
          "debugger": {
            "DisplayName": "GNU gdb 11.2.0 for MinGW 11.2.0 64-bit",
            "Abis": ["x86-windows-msys-pe-64bit"],
            "Binary": "C:/Qt/Tools/mingw1120_64/bin/gdb.exe",
            "EngineType": 1,
            "Version": "11.2.0"
          }
        }
  ]
}

为了加快在Windows上的进程,请在《cacheVariables》部分指定 CMAKE_C_COMPILERCMAKE_CXX_COMPILER

有关某些 debugger 参数的可能值,请参阅《添加调试器》。

Ninja生成器示例

以下配置和构建预设将Ninja Multi-Config作为生成器,添加了 DebugRelease 构建步骤,并将 ninja.exe 的路径指定为 CMAKE_MAKE_PROGRAM 变量的值

{
  "version": 2,
  "configurePresets": [
    {
      "name": "ninja-nmc",
      "displayName": "Ninja Multi-Config MinGW",
      "generator": "Ninja Multi-Config",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug;Release",
        "CMAKE_PREFIX_PATH": "C:/Qt/6.4.0/mingw_64"
        "CMAKE_MAKE_PROGRAM": "C:/Qt/Tools/Ninja/ninja.exe"
      },
      "environment": {
        "PATH": "c:/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "release",
      "displayName": "Ninja Release",
      "configurePreset": "ninja-nmc",
      "configuration": "Release"
    },
    {
      "name": "debug",
      "displayName": "Ninja Debug",
      "configurePreset": "ninja-nmc",
      "configuration": "Debug"
    }
  ]
}

此示例假定CMake可执行文件路径已在《首选项》>《CMake》>《工具》中设置

MSVC示例

当使用与NMAKE Makefiles、Ninja或Ninja Multi-Config生成器配合的MSVC编译器时,您可以为《架构》和《工具集》字段使用《外部》策略。这允许Qt Creator在调用CMake之前设置Visual C++环境。

例如

"generator": "Ninja Multi-Config",
"toolset": {
  "value": "v142,host=x64",
  "strategy": "external"
},
"architecture": {
  "value": "x64",
  "strategy": "external"
},

如果您使用非VS生成器的MSVC编译器并在《PATH》中具有多个编译器,那么您可能还必须在《cacheVariables》或《environmentVariables》中指定要使用的编译器

"generator": "Ninja Multi-Config",
"toolset": {
  "value": "v142,host=x64",
  "strategy": "external"
},
"architecture": {
  "value": "x64",
  "strategy": "external"
},
"cacheVariables": {
  "CMAKE_C_COMPILER": "cl.exe",
  "CMAKE_CXX_COMPILER": "cl.exe"
}

交叉编译示例

以下示例配置了Qt项目,以便在macOS上交叉编译以用于Windows,并在macOS上使用《wine》模拟器运行

  • 生成器 – Ninja
  • 构建目录 – <sourceDir>/build-release
  • LLVM/MinGW工具链
  • 配置类型 – 《CMAKE_BUILD_TYPE》设置为《Release》
  • LLDB 18.1.6调试器
  • 《wine》模拟器
{
  "version": 4,
  "configurePresets": [
    {
      "name": "llvm-mingw",
      "displayName": "LLVM-MinGW 18.1.6",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build-release",
      "toolchainFile": "llvm-mingw.cmake",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "CMAKE_CROSSCOMPILING_EMULATOR": "/opt/homebrew/bin/wine"
      },
      "vendor": {
        "qt.io/QtCreator/1.0": {
          "debugger": {
            "DisplayName": "LLDB 18.1.6 (CMake Preset)",
            "Abis": ["x86-darwin-generic-mach_o-64bit", "arm-darwin-generic-mach_o-64bit"],
            "Binary": "/Users/jdoe/llvm-mingw/bin/lldb",
            "EngineType": 256,
            "Version": "18.1.6"
          }
        }
      }
    }
  ]
}

使用条件

如果它们匹配《condition》,则会使用以下配置预置。也就是说,如果《hostSystemName》等于《Linux》,则使用《linux》预置,如果等于《Windows》,则使用《windows》预置。

{
  "version": 3,
  "configurePresets": [
    {
      "name": "linux",
      "displayName": "Linux GCC",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_PREFIX_PATH": "$env{HOME}/Qt/6.4.0/gcc_64"
      },
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Linux"
      }
    },
    {
      "name": "windows",
      "displayName": "Windows MSVC",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_PREFIX_PATH": "$env{SYSTEMDRIVE}/Qt/6.4.0/msvc2019_64"
      },
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Windows"
      }
    }
  ]
}

另请参阅《CMake构建配置》、《CMake》和《SDK工具》。

©2024 The Qt Company Ltd. 本文档中的贡献是该权利所有者的版权。本提供的文档是根据自由软件基金会发布的《GNU自由文档许可证第1.3版》的条款下许可的。Qt及其相关标志是芬兰和其他国家的The Qt Company Ltd的商标。所有其他商标均为各自所有者的财产。