![](/img/trans.png)
[英]In VSCode, unable to use args in launch.json to pass command-line arguments to C++ project using cmake
[英]How do I add command line launch arguments to a Release target in a CMake-managed C++ project in MSVC 2019?
我的目标是从 MSVC 运行例如MyTarget.exe "C:\Users\MHebes\config.json
。
我可以在调试模式下做到这一点,但不能让它在发布中工作。
如果我右键单击我的顶级 CMakeLists.txt,我可以看到当前打开文件夹的launch.vs.json
:
..\..\..\..\AppData\Local\Microsoft\VisualStudio\16.0_45505961\OpenFolder\launch_schema.json :
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "MyTarget.exe (apps\\MyTarget\\Debug\\MyTarget.exe)",
"name": "Debug launch target for MyTarget",
"args": [
"C:/Users/MHebes/config.json"
]
}
]
}
首先我并不完全理解这一点,因为launch.vs.json 文档没有提到任何关于"configurations"
列表的内容,但这就是我添加新配置时自动填充的方式。 无论如何,这在调试模式下有效——“调试 MyTarget 的启动目标”选项显示在Select Startup Item...
列表中,当在下拉列表中选择Debug
时。
我在CMakeSettings.json
中添加了Release
/ RelWithDebugInfo
配置。
但是当我实际将构建切换到Release
时, Select Startup Item...
列表仅填充了默认的 CMakeTargets。
如何将命令行启动 arguments 添加到发布版本?
我的最终目标是,当我在发布模式下开始调试时,它将构建一个发布 exe 并使用一些参数运行它。
我想我想通了。 我添加了另一个具有不同目标的配置:
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "MyTarget.exe (apps\\MyTarget\\Debug\\MyTarget.exe)",
"name": "Debug launch target for MyTarget",
"args": [
"C:/Users/MHebes/config.json"
]
},
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "MyTarget.exe (apps\\MyTarget\\RelWithDebInfo\\MyTarget.exe)",
"name": "RelWithDebInfo launch target for MyTarget",
"args": [
"C:/Users/MHebes/config.json"
]
}
]
}
配置 CMake 调试会话上的 Microsoft Docs 页面说:
projectTarget
:指定在构建项目时要调用的 CMake 目标。 如果您从“调试”菜单或“目标”视图输入 launch.vs.json,Visual Studio 会自动填充此属性。 此值必须与“启动项”下拉列表中列出的现有调试目标的名称相匹配。
由于 Visual Studio 使用包含可执行文件路径的名称填充启动列表,并且因为该路径取决于配置名称(即buildRoot
中的CMakeSettings.json
默认在路径中包含${name}
),这解释了为什么projectTarget
必须包含配置路径。
这对我来说似乎是一个疯狂的界面。 也许我做错了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.