添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
完美的酱牛肉  ·  mime type ...·  10 月前    · 
满身肌肉的火柴  ·  求助,关于java8 ...·  1 年前    · 

CMakeSettings.json 文件包含 Visual Studio 为 IntelliSense 使用的信息,并为指定的配置和编译器环境构造它传递给 CMake 的命令行参数。 配置指定适用于特定平台和生成类型的属性,例如 x86-Debug Linux-Release 。 每个配置都指定一个环境,该环境封装有关编译器工具集的信息,例如 MSVC、GCC 或 Clang。 CMake 使用命令行参数为项目重新生成根 CMakeCache.txt 文件和其他项目文件。 可以在 CMakeLists.txt 文件中覆盖这些值。

可以在 IDE 中添加或删除配置,然后直接在 JSON 文件中对其进行编辑,或使用“CMake 设置编辑器”(Visual Studio 2019 及更高版本)。 可以在 IDE 中轻松切换配置,以生成各种项目文件。 有关详细信息,请参阅 在 Visual Studio 中自定义 CMake 生成设置

configurations 数组包含 CMake 项目的所有配置。 有关预定义配置的详细信息,请参阅 CMake 预定义配置参考 。 可以向该文件添加任意数量的预定义或自定义配置。

configuration 具有以下属性:

  • addressSanitizerEnabled :如果为 true ,则使用 AddressSanitizer 编译程序。 在 Linux 上,使用 -fno-omit-frame-pointer 和编译器优化级别 -Os -Oo 进行编译,以获得最佳结果。

  • addressSanitizerRuntimeFlags :通过 ASAN_OPTIONS 环境变量传递给 AddressSanitizer 的运行时标志。 格式:flag1=value:flag2=value2。

  • buildCommandArgs :指定在 --build -- 后传递给 CMake 的本机生成开关。 例如,在使用 Ninja 生成器时,传递 -v 会强制 Ninja 输出命令行。 有关 Ninja 命令的详细信息,请参阅 Ninja 命令行参数

  • buildRoot :指定 CMake 要在其中为所选生成器生成生成脚本的目录。 映射到 -DCMAKE_BINARY_DIR 开关并指定 CMakeCache.txt 的创建位置。 如果此文件夹不存在,则创建一个。 支持的宏包括 ${workspaceRoot} ${workspaceHash} ${projectFile} ${projectDir} ${thisFile} ${thisFileDir} ${name} ${generator} ${env.VARIABLE}

  • cacheGenerationCommand :指定命令行工具和参数,例如,指定 gencache.bat debug 来生成缓存。 当用户显式请求重新生成或者修改了 CMakeLists.txt CMakeSettings.json 文件时,系统会从指定环境中的 shell 运行该命令以实现配置。

  • cacheRoot :指定 CMake 缓存的路径。 此目录应包含现有 CMakeCache.txt 文件。

  • clangTidyChecks :要传递给 clang-tidy 的警告的逗号分隔列表;可使用通配符,“-”前缀会删除检查。

  • cmakeCommandArgs :指定调用以生成项目文件时传递给 CMake 的其他命令行选项。

  • cmakeToolchain :指定工具链文件。 使用 -DCMAKE_TOOLCHAIN_FILE 将其传递给 CMake。

  • codeAnalysisRuleset :指定运行代码分析时要使用的规则集。 可以使用完整路径或由 Visual Studio 安装的规则集文件的文件名。

  • configurationType :为所选生成器指定生成类型配置。 可能是以下其中之一:

  • Debug
  • Release
  • MinSizeRel
  • RelWithDebInfo
  • ctestCommandArgs :指定运行测试时传递给 CTest 的其他命令行选项。

  • description :菜单中显示的此配置的说明。

  • enableClangTidyCodeAnalysis :使用 Clang-Tidy 进行代码分析。

  • enableMicrosoftCodeAnalysis :使用 Microsoft 代码分析工具进行代码分析。

  • generator :指定在此配置中使用的 CMake 生成器。 可能是以下其中之一:

    仅限 Visual Studio 2019:

  • Visual Studio 16 2019
  • Visual Studio 16 2019 Win64
  • Visual Studio 16 2019 ARM
  • Visual Studio 2017 及更高版本:

  • Visual Studio 15 2017
  • Visual Studio 15 2017 Win64
  • Visual Studio 15 2017 ARM
  • Visual Studio 14 2015
  • Visual Studio 14 2015 Win64
  • Visual Studio 14 2015 ARM
  • Unix Makefiles
  • Ninja
  • 由于 Ninja 旨在加快生成速度,而不是提高灵活性和功能,因此它被设为默认生成器。 但是,某些 CMake 项目可能无法使用 Ninja 正确地进行生成。 如果出现生成失败,你可以指示 CMake 改为生成 Visual Studio 项目。

    若要指定 Visual Studio 2017 中的 Visual Studio 生成器,请选择“CMake”|“更改 CMake 设置”,从主菜单打开设置编辑器。 删除“Ninja”并输入“V”。 此更改会激活 IntelliSense,从而可选择你所需的生成器。

    若要指定 Visual Studio 2019 中的 Visual Studio 生成器,请右键单击“解决方案资源管理器”中的 CMakeLists.txt 文件,并选择“项目的 CMake 设置”>“显示高级设置”>“CMake 生成器”。

    默认情况下,当活动配置指定一个 Visual Studio 生成器时,会使用 -m -v:minimal 参数调用 MSBuild。 若要自定义生成,请使用 CMakeSettings.json 文件中的 buildCommandArgs 属性。 在此,你可以指定要传递到生成系统的 MSBuild 命令行参数

    "buildCommandArgs": "-m:8 -v:minimal -p:PreferredToolArchitecture=x64"
    
  • installRoot:指定 CMake 要在其中为所选生成器生成安装目标的目录。 支持的宏包括 ${workspaceRoot}${workspaceHash}${projectFile}${projectDir}${thisFile}${thisFileDir}${name}${generator}${env.VARIABLE}

  • inheritEnvironments:指定此配置依赖的一个或多个编译器环境。 可以是任何自定义环境或预定义环境之一。 有关详细信息,请参阅环境

  • intelliSenseMode:指定用于计算 IntelliSense 信息的模式。 该值可能是以下某个值:

  • windows-msvc-x86
  • windows-msvc-x64
  • windows-msvc-arm
  • windows-msvc-arm64
  • android-clang-x86
  • android-clang-x64
  • android-clang-arm
  • android-clang-arm64
  • ios-clang-x86
  • ios-clang-x64
  • ios-clang-arm
  • ios-clang-arm64
  • windows-clang-x86
  • windows-clang-x64
  • windows-clang-arm
  • windows-clang-arm64
  • linux-gcc-x86
  • linux-gcc-x64
  • linux-gcc-arm
  • name:为配置命名。 有关预定义配置的详细信息,请参阅 CMake 预定义配置参考

  • wslPath:适用于 Linux 的 Windows 子系统的实例的启动器路径。

    适用于 CMake Linux 项目的设置

  • remoteMachineName:指定托管 CMake、生成和调试程序的远程 Linux 计算机的名称。 使用连接管理器添加新的 Linux 计算机。 支持的宏包括 ${defaultRemoteMachineName}
  • remoteCopySourcesOutputVerbosity:指定将源复制到远程计算机的操作的详细级别。 可能是 NormalVerboseDiagnostic
  • remoteCopySourcesConcurrentCopies:指定将源同步到远程计算机期间使用的并发副本数(仅限 sftp)。
  • remoteCopySourcesMethod:指定将文件复制到远程计算机的方法。 可能是 rsyncsftp
  • remoteCMakeListsRoot:指定包含 CMake 项目的远程计算机上的目录。 支持的宏包括 ${workspaceRoot}${workspaceHash}${projectFile}${projectDir}${thisFile}${thisFileDir}${name}${generator}${env.VARIABLE}
  • remoteBuildRoot:指定 CMake 要在其中为所选生成器生成生成脚本的远程计算机上的目录。 支持的宏包括 ${workspaceRoot}${workspaceHash}${projectFile}${projectDir}${thisFile}${thisFileDir}${name}${generator}${env.VARIABLE}
  • remoteInstallRoot:指定 CMake 要在其中为所选生成器生成安装目标的远程计算机上的目录。 支持的宏包括 ${workspaceRoot}${workspaceHash}${projectFile}${projectDir}${thisFile}${thisFileDir}${name}${generator}${env.VARIABLE},其中 VARIABLE 是一项环境变量且已在系统、用户或会话级别进行定义。
  • remoteCopySourcesboolean,指定 Visual Studio 是否应将源文件复制到远程计算机。 默认值为 true。 如果自行管理文件同步,则设置为 false。
  • remoteCopyBuildOutputboolean,指定是否要从远程计算机复制生成输出。
  • remoteCopyAdditionalIncludeDirectories:要从远程计算机复制以支持 IntelliSense 的附加包含目录。 格式为“/path1;/path2...”。
  • remoteCopyExcludeDirectories:不从远程计算机复制的包含目录。 格式为“/path1;/path2...”。
  • remoteCopyUseCompilerDefaults:指定是否使用编译器的默认定义并包含 IntelliSense 的路径。 仅当使用的编译器不支持 gcc 样式的参数时,才应为 false。
  • rsyncCommandArgs:指定传递给 rsync 的命令行选项集。
  • remoteCopySourcesExclusionList:指定复制源文件时要排除的路径列表的 array:路径可以是文件/目录的名称,或副本根中的相对路径。 可使用通配符 *? 实现 glob 模式匹配。
  • cmakeExecutable:指定 CMake 程序可执行文件的完整路径,包括文件名和扩展名。
  • remotePreGenerateCommand:指定在运行 CMake 以分析 CMakeLists.txt 文件之前要运行的命令。
  • remotePrebuildCommand:指定生成前要在远程计算机上运行的命令。
  • remotePostbuildCommand:指定生成后要在远程计算机上运行的命令。
  • variables:包含以 -D name=value 的形式传递给 CMake 的 CMake 变量名称/值对。 如果 CMake 项目生成指令指定将任意变量直接添加到 CMakeCache.txt 文件,那么建议改为在这里添加它们。 本示例演示如何指定名称/值对以使用 14.14.26428 MSVC 工具集:
  • "variables": [
          "name": "CMAKE_CXX_COMPILER",
          "value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
          "type": "FILEPATH"
          "name": "CMAKE_C_COMPILER",
          "value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
          "type": "FILEPATH"
    

    如果不定义 "type",则默认为 "STRING"

  • remoteCopyOptimizations:Visual Studio 2019 16.5 或更高版本的属性,用于对源到远程目标的复制进行控制。 默认情况下启用优化。 包括 remoteCopyUseOptimizationsrsyncSingleDirectoryCommandArgsremoteCopySourcesMaxSmallChange
  • 环境封装了在 Visual Studio 用来调用 CMake 的进程中设置的环境变量。 对于 MSVC 项目,它捕获开发人员命令提示中为特定平台设置的变量。 例如,环境msvc_x64_x64与使用 -arch=amd64 -host_arch=amd64 参数运行 VS {version} 开发人员命令提示符相同。 可以使用 CMakeSettings.json 中的 env.{<variable_name>} 语法来引用各个环境变量,例如用于构造文件夹路径。 下面提供了一些预定义环境:

  • linux_arm:远程将 ARM Linux 设为目标。
  • linux_x64:远程将 x64 Linux 设为目标。
  • linux_x86:远程将 x86 Linux 设为目标。
  • msvc_arm:将具有 MSVC 编译器的 ARM Windows 设为目标。
  • msvc_arm_x64:将具有 64 位 MSVC 编译器的 ARM Windows 设为目标。
  • msvc_arm64:将具有 MSVC 编译器的 ARM64 Windows 设为目标。
  • msvc_arm64_x64:将具有 64 位 MSVC 编译器的 ARM64 Windows 设为目标。
  • msvc_arm64ec:面向具有 MSVC 编译器的 ARM64EC Windows。
  • msvc_arm64ec_x64:面向具有 64 位 MSVC 编译器的 ARM64EC Windows。
  • msvc_x64:将具有 MSVC 编译器的 x64 Windows 设为目标。
  • msvc_x64_x64:将具有 64 位 MSVC 编译器的 x64 Windows 设为目标。
  • msvc_x86:将具有 MSVC 编译器的 x86 Windows 设为目标。
  • msvc_x86_x64:将具有 64 位 MSVC 编译器的 x86 Windows 设为目标。
  • CMakeLists.txt 访问环境变量

    CMakeLists.txt 文件中,语法 $ENV{variable_name} 可引用所有环境变量。 若要查看环境的可用变量,请打开相应的命令提示,然后键入 SET。 环境变量中的某些信息也可以通过 CMake 系统自检变量获得,但你可能会发现使用环境变量更方便。 例如,你可以通过环境变量轻松检索 MSVC 编译器版本或 Windows SDK 版本。

    自定义环境变量

    你可在 CMakeSettings.jsonenvironments 数组中以全局形式或按配置定义自定义环境变量。 自定义环境是对一组属性进行分组的一种简便方法。 你可以用它来代替预定义的环境,或者扩展或修改预定义的环境。 environments 数组中的每一项都包含以下内容:

  • namespace:为环境命令,以便可从窗体 namespace.variable 中的配置中引用其变量。 默认环境对象称为 env 并由特定系统环境变量(包括 %USERPROFILE%)填充。
  • environment:唯一标识此组变量。 允许稍后在 inheritEnvironments 输入中继承该组。
  • groupPriority:评估变量时指定这些变量的优先级的整数。 优先评估数字较大的项。
  • inheritEnvironments:指定由该组继承的一组环境的数组值。 使用该功能可以继承默认环境,以及创建在运行时传递给 CMake 的自定义环境变量。
  • 在 Visual Studio 2019 版本 16.4 及更高版本中: 调试目标会使用你在 CMakeSettings.json 中指定的环境自动启动。 你可以在 launch.vs.jsontasks.vs.json 中按目标或按任务覆盖或添加环境变量。

    下面的示例定义一个全局变量 BuildDir,该变量在 x86-Debug 和 x64-Debug 配置中继承。 每个配置都使用该变量来指定配置的 buildRoot 属性值。 也请注意每个配置如何使用 inheritEnvironments 属性来指定仅应用于该配置的值。

    // The "environments" property is an array of key-value pairs of the form // { "EnvVar1": "Value1", "EnvVar2": "Value2" } "environments": [ "BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build", "configurations": [ "name": "x86-Debug", "generator": "Ninja", "configurationType": "Debug", // Inherit the defaults for using the MSVC x86 compiler. "inheritEnvironments": [ "msvc_x86" ], "buildRoot": "${env.BuildDir}\\${name}" }, "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", // Inherit the defaults for using the MSVC x64 compiler. "inheritEnvironments": [ "msvc_x64" ], "buildRoot": "${env.BuildDir}\\${name}"

    在下一个示例中,x86-Debug 配置为 BuildDir 属性定义其自己的值。 此值替代由全局 BuildDir 属性设置的值,以便 BuildRoot 评估为 D:\custom-builddir\x86-Debug

    "environments": [ "BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}", "configurations": [ "name": "x86-Debug", // The syntax for this property is the same as the global one above. "environments": [ // Replace the global property entirely. "BuildDir": "D:\\custom-builddir" // This environment does not specify a namespace, hence by default "env" is assumed. // "namespace" : "name" would require that this variable be referenced with "${name.BuildDir}". "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x86" ], // Evaluates to "D:\custom-builddir\x86-Debug" "buildRoot": "${env.BuildDir}\\${name}" "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x64" ], // Since this configuration doesn't modify BuildDir, it inherits // from the one defined globally. "buildRoot": "${env.BuildDir}\\${name}"

    以下宏可在 CMakeSettings.json 中使用:

  • ${workspaceRoot}:工作区文件夹的完整路径
  • ${workspaceHash}:工作区位置的哈希;可用于创建当前工作区的唯一标识符(例如用于文件路径)
  • ${projectFile} - 根 CMakeLists.txt 文件的完整路径
  • ${projectDir} - 包含根 CMakeLists.txt 文件的文件夹完整路径
  • ${projectDirName} - 包含根 CMakeLists.txt 文件的文件夹名称
  • ${thisFile}CMakeSettings.json 文件的完整路径
  • ${name}:配置的名称
  • ${generator}:配置中使用的 CMake 生成器的名称
  • CMakeSettings.json 中宏和环境变量的所有引用在传递给 CMake 命令行之前都已展开。

    Ninja 命令行参数

    如果未指定目标,Ninja 会生成“默认”目标。

    C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise>ninja -?
    ninja: invalid option -- `-?'
    usage: ninja [options] [targets...]