繁体   English   中英

如何在 MSVC 2019 的 CMake 管理的 C++ 项目中将命令行启动 arguments 添加到发布目标?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM