问题描述
最近在使用 VS Code 刷算法题时,遇到了一个令人头疼的问题。由于题目文件命名中包含括号,导致 Run Code 时无法正确编译 C++ 代码。具体表现为,插件自动生成的编译命令无法正确解析文件名,导致编译失败。
同时发现只要没有括号正常命名的文件都可以正常编译,于是打算去Run Code的编译设置项里探索一番
问题分析
询问AI得知,Run Code 插件通过 code-runner.executorMap
中的设置来确定如何运行不同类型的文件。当文件名包含括号等特殊字符时,插件可能无法正确解析,导致编译命令出错。所以思路是用转义字符使文件名不被命令行当做可执行文件名读取即可
解决方案
-
寻找
code-runner.executorMap
我尝试在vscode的运行命令里寻找该项,但是无结果
直到我去到runcode插件的设置项里才发现
-
开始修改代码
根据1的指引进入settings.json
之后我们找到 C++ (cpp) 的配置。它看起来应该像这样:"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
整个文件可能是这样:
修改该行中
$fileName
属性,变为\"$fileName\"
或者'$fileName'
都可以使整个文件名不被命令行理解为可执行程序名而报错,类似这样:"cpp": "cd $dir && g++ \"$fileName\" -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
或
"cpp": "cd $dir && g++ `$fileName`-o $fileNameWithoutExt && $dir$fileNameWithoutExt",
-
成功检查 运行试试
成功!我的路径显示有a.exe使因为我除了修改了$fileName
属性,还将-o
后面的两个地址都固定了,实现任意的cpp编译后只会生成在固定路径下的a.exe,不过这种固定写法一般不适用于构建cpp项目,写题正好。限于篇幅和预防标题诈骗就不在本文赘述,可以跳转至xxx查看
总结
根据编译路径可以倒推出问题所在,借助ai快速找到可能问题
希望这篇博客能帮助到遇到类似问题的开发者!