VS2022中CMake项目launch.vs.json的按配置设置语法
基于launch.vs.json的buildConfigurations字段实现多配置适配
当前配置内容
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "my_exe.exe", "name": "my_exe.exe", "env": { "PATH": "%PATH%;C:\\libraries\\vcpkg\\installed\\x64-windows\\bin;C:\\libraries\\vcpkg\\installed\\x64-windows\\debug\\bin" }, "args": [ "some cmd line arg" ] } ] }
需求说明
需要根据当前选择的Debug/Release构建配置,自动让PATH环境变量仅包含对应模式的vcpkg库路径,同时为不同配置设置独立的命令行参数,且需采用微软官方文档提及的buildConfigurations字段实现,拒绝使用未公开语法的非优解。
针对buildConfigurations字段的疑问解答
是否为键值对数组?
不是,buildConfigurations是一个对象,其键为具体的构建配置名称(如"Debug"、"Release"),值为对应配置下需要覆盖或新增的属性集合。键值对的语法是什么?
语法为标准JSON对象结构:键是字符串类型的构建配置名,值是一个对象,内部可以包含env、args等需要针对该配置单独设置的属性。是否会替代configurations数组?
不会。buildConfigurations是嵌套在单个configuration条目内部的字段,用于为该条目下的不同构建配置提供差异化属性,而非替代整个configurations数组。键和值具体指什么?
- 键:必须是与VS中CMake构建配置完全匹配的名称(如"Debug"、"Release"、"RelWithDebInfo"等)。
- 值:是一个对象,包含需要针对该构建配置单独定制的属性,比如
env(环境变量)、args(命令行参数)等,这些属性会覆盖当前configuration条目中的同名基础属性。
最终配置示例
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "my_exe.exe", "name": "my_exe.exe", // 基础属性(可选,若某配置未单独定义则使用此处值) "env": { "PATH": "%PATH%" }, "args": [], // 针对不同构建配置的差异化设置 "buildConfigurations": { "Debug": { "env": { "PATH": "%PATH%;C:\\libraries\\vcpkg\\installed\\x64-windows\\debug\\bin" }, "args": [ "debug-mode-arg", "log-level=verbose" ] }, "Release": { "env": { "PATH": "%PATH%;C:\\libraries\\vcpkg\\installed\\x64-windows\\bin" }, "args": [ "release-mode-arg", "optimize=true" ] } } } ] }
配置说明
- 当选择Debug构建配置时,会使用
buildConfigurations.Debug下的env和args,自动将PATH设置为包含Debug库路径,并使用Debug专属命令行参数。 - 当选择Release构建配置时,同理使用Release对应的路径和参数。
- 若存在其他构建配置(如RelWithDebInfo),可在
buildConfigurations中新增对应键值对即可。
内容的提问来源于stack exchange,提问作者jwezorek
相关产品推荐
相关产品推荐

