我正在使用 [VSCode][2] (Visual Studio Code) 的 Code Runner,并且我正在尝试更改
C++
的运行命令。
我的settings.json 文件中有以下设置:
// Set the executor of each language.
"code-runner.executorMap": {
// ...
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
// ...
}
然后,当我按
CTRL SHIFT P
并按 Run Code
上的 Enter 运行当前的 C++ 文件时,它会生成以下要运行的命令:
cd "c:\C++\" && g++ main.cpp -o main && "c:\C++\"main
但是命令的输出是:
bash: cd: c:\C++" && g++ main.cpp -o main && c:C++"main: No such file or directory
这是因为正如您在正在运行的命令中看到的那样,它试图 CD 到
"c:\C++\"
但 \
字符没有被转义,导致命令失败。
如果该命令将所有 \
字符转义为看起来像 "c:\\C++\\"
,则它将正确运行。
我正在使用 git bash 控制台作为我的集成终端。
如何解决此问题并转义从我的
$dir
文件中的 settings.json
变量中检索的路径?
尝试使用 $dirWithoutTrailingSlash 变量而不是 $dir。
如果这不起作用,您可以尝试在位于
codeManager.js
的 %VSCODE_INSTALL%\Data\code\extensions\formulahendry.coderunner-%VERSION%\out\src\
中创建自己的变量。
向位于第 246 行附近的
placeholders
数组添加条目。例如:
{ regex: /\$dirWithoutQuotesNorTrailingSlash/g, replaceValue: this.getCodeFileDirWithoutTrailingSlash() }
我用来替换的
{ regex: /\$dirWithoutTrailingSlash/g, replaceValue: this.quoteFileName(this.getCodeFileDirWithoutTrailingSlash()) }
因为我无法在类路径中使用带有显式引号的变量。 您还可以使用正则表达式定义自己的函数返回值(例如 getCodeFileDirWithoutTrailingSlash)(大约第 222 行)。
我建议使用make,这样更灵活,只需在根目录中创建一个包含该内容的makefile即可:
all:
g++ main.cpp -o main.exe
main.exe
现在您可以通过编写
make all
或仅 make
来通过终端运行此目标(这将运行第一个目标)。
要通过代码运行器快速运行目标,您需要将此代码添加到settings.json:
"code-runner.executorMap": {
"cpp": "make -s #",
}
-s 标志代表静默,即不向控制台输出命令,# 是一个注释符号,用于注释代码运行程序将添加到命令中的文件的路径。