如何在VSCode+CMake项目中配置控制台运行参数?
问题:VSCode中CMake C++项目无法读取控制台参数
在VSCode的CMake C++项目中,尝试给int main(int argc, char* argv[])传递控制台参数(如"hello world.txt"),但打印argc和argv时,始终仅能获取到exe的绝对路径这一个元素。试过在launch.json的args数组配置参数,也尝试用CMake的add_definition,均无效果。
配置文件
CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0) project(firstProject VERSION 0.1.0) set (CMAKE_CXX_STANDARD 20) include(CTest) include_directories(headers) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) enable_testing() add_executable(firstProject main.cpp ala.cpp "headers/ala.h") set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)
launch.json
{ "configurations": [ //CMAKE ADDITIONAL CONFIGURATION { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", // Resolved by CMake Tools: "program": "${command:cmake.launchTargetPath}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [ { "name": "${workspaceFolder}", "value": "$PATH:${command:cmake.launchTargetDirectory}" } ], "externalConsole": true, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] }, { "name": "C/C++: g++.exe build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe build active file" } ], "version": "2.0.0" }
解决方法
1. 选对调试配置
你有两个调试配置,其中(gdb) Launch是和CMake Tools关联的正确配置,而C/C++: g++.exe build and debug active file是针对单个文件的编译调试,和CMake项目无关。启动调试时必须选择(gdb) Launch配置(VSCode左下角的调试配置选择器可切换)。
2. 正确配置args数组
在(gdb) Launch配置的args中添加参数,注意带空格的参数要作为单独的数组元素:
// 传递两个独立参数 "args": ["hello", "world.txt"], // 传递带空格的单个参数 "args": ["hello world.txt"],
3. 关于CMake的add_definitions
add_definitions用于添加编译阶段的宏定义,和运行时的控制台参数完全无关,所以这个方法不适用,无需在CMake中做相关配置。
4. 修正environment配置错误
你的environment中name字段设置错误,应该是环境变量名(比如PATH),而非${workspaceFolder},修正后:
"environment": [ { "name": "PATH", "value": "$PATH:${command:cmake.launchTargetDirectory}" } ],
内容的提问来源于stack exchange,提问作者www987
相关产品推荐
相关产品推荐

