CMake 预置

CMakePresets.json 有用于整个项目联编的选项,而 则有用于本地联编的选项。CMakeUserPresets.json

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

Qt Creator CMake-Presets(7) 支持版本 5 以下的配置构建预设(在 CMake 3.24 中引入),但不执行版本检查。它会读取并使用版本 5 的所有字段(如果存在)。它不支持测试预置。

当没有CMakeLists.txt.user 文件或禁用了项目中的所有工具包时,可以在首次打开项目时导入预设。

打开带有 CMake 预置的项目

您可以在Initial Configuration 字段及其下方的环境配置字段中查看预设。

CMake 环境配置

要更新对CMakePresets.json 文件的更改,请选择Build >Reload CMake Presets ,然后选择要加载的预设文件。

配置预置

以下配置预置指示 CMake 使用平台上的默认生成器,并为所有构建类型指定构建目录。NOT_COMMON_VALUE 显示在环境配置字段中的Initial ParametersAN_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 Qt XML 供应商预设

MinGW 示例

下面的示例使用 MinGW 编译器配置 Qt 项目:

  • MinGW 编译器
  • 编译目录 -<sourceDir>/build-release
  • 编译类型 -CMAKE_BUILD_TYPE asRelease
  • 生成器 - MinGW Makefiles
  • CMake 可执行文件的路径
  • 通过CMAKE_PREFIX_PATH
  • GNU gdb 11.2.0 用于 MinGW 11.2.0 64 位调试器
{
  "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 部分首选项的可能值,请参阅CMake Qt XML Vendor Presets

忍者生成器示例

以下配置和联编预设将 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_CONFIGURATION_TYPES": "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 ">"Tools"中设置。

MSVC 示例

在 MSVC 编译器中使用 NMAKE Makefile、Ninja 或 Ninja Multi-Config 生成器时,可以对architecturetoolset 字段使用external 策略。这样,Qt Creator 就能在调用 CMake 之前设置 Visual C++ 环境。

例如

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

如果您在非 VS 生成器中使用 MSVC 编译器,并且在PATH 中有多个编译器,您可能还需要在cacheVariablesenvironmentVariables 中指定要使用的编译器:

"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 模拟器运行:

  • 生成器 - 忍者
  • 编译目录<sourceDir>/build-release
  • LLVM/MinGW 工具链
  • 配置类型 -CMAKE_BUILD_TYPE asRelease
  • 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 Build ConfigurationCMakeCMake Qt Vendor PresetsSDK Tool

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.