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