如何在Visual Studio中直接调试CMake项目时应用命令行参数?
CMake项目调试命令行参数问题
项目代码
CMakeLists.txt
#CMakeLists.txt cmake_minimum_required(VERSION 3.13 FATAL_ERROR) project(ArgExample) add_executable (ArgExample main.cpp) set_target_properties(ArgExample PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS "arg1")
main.cpp
//main.cpp #include <iostream> int main(int argc, char* argv[]) { std::cout << "Arg example\n\n" << std::endl; for (int i = 1; i < argc; i++) { std::cout << "Argument " << i << ": " << argv[i] << std::endl; } return 0; }
现象
- 通过CMake生成
.sln文件,在Visual Studio中打开该解决方案调试时,VS_DEBUGGER_COMMAND_ARGUMENTS设置的命令行参数可正常生效,输出预期结果。 - 直接在Visual Studio中打开
CMakeLists.txt启动CMake项目调试时,上述命令行参数未被应用。
解决方法
方法1:通过VS的launch.vs.json配置调试参数
这是Visual Studio CMake集成模式下最可靠的调试参数配置方式:
- 在Visual Studio的「解决方案资源管理器」中,找到CMake目标
ArgExample.exe,右键点击选择添加调试配置。 - VS会自动在项目根目录的
.vs文件夹下生成launch.vs.json文件,打开该文件,在对应目标的配置节点中添加args字段,指定需要的命令行参数:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "ArgExample.exe", "name": "ArgExample.exe", "args": ["arg1"] } ] }
- 保存文件后重新启动调试,命令行参数即可正常生效。
方法2:调整CMakeLists.txt的属性设置(针对部分VS版本)
部分Visual Studio版本在CMake集成模式下对VS_DEBUGGER_COMMAND_ARGUMENTS属性的处理有差异,可以尝试针对不同构建配置明确设置:
# 在add_executable之后添加,针对Debug/Release等配置生效 set_target_properties(ArgExample PROPERTIES $<$<CONFIG:Debug>:VS_DEBUGGER_COMMAND_ARGUMENTS> "arg1" $<$<CONFIG:Release>:VS_DEBUGGER_COMMAND_ARGUMENTS> "arg1" )
不过这种方式的兼容性不如launch.vs.json稳定,优先推荐方法1。
内容的提问来源于stack exchange,提问作者devansan
相关产品推荐
相关产品推荐

