簡體   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