如下图所示,如果我们使用的是windows系统,当我们编写好C++文件之后,执行run code命令,就会出现的下面的错误提示:

g++: error: testCodeRunnner.cpp: No such file or directory

g++: fatal error: no input files

compilation terminated.

gn文件中的defines g++ no input files_code runner


仔细分行上面的运行命令:

cd “d:\temp” && g++ testCodeRunnner.cpp -o testCodeRunnner && "d:\temp"testCodeRunnner

实际上,这行命令包含三个步骤:

(1)进入到cpp文件所在的目录:cd “d:\temp”

(2)在文件所在目录将文件编译成可以执行文件: g++ testCodeRunnner.cpp -o testCodeRunnner

(3)运行编译之后的可执行文件,d:\temp"testCodeRunnner

出现错误的原在于第一个步骤,通过上面的图可以看到,由于我们当前所在的目录是c盘下面,但是我们的文件在d:\temp, windows系统中不能直接cd到另外一个盘。也就是说,第一个命令cd “d:\temp” 是不能从c盘切换到D盘的。如果我们需要从一个盘切换到另外一个盘,需要在cd命令前加上 /d 字段,完整命令格式为: cd /d 绝对路径。比如上述命令就需要变成:cd /d “d:\temp”

找到问题的原因之后,就能解决这个问题了

(1)第一种方法就是,手动切换到文件所在的盘之后,然后再执行run code命令。上面提到命令失败的主要原因是,cd 命令不能跨盘切换,因此可以先将当前目录切换到d盘,直接输入 d: 然后回车就可以切换到d盘了

(2)另外一种就在run code命令中加上 /d 字段,防止从一个盘切换到另外一个盘时失败。

进入到Code Runner的设置 - > extension settings

gn文件中的defines g++ no input files_gn文件中的defines_02


然后修改json配置文件:

gn文件中的defines g++ no input files_vscode_03


从配置文件中可以看看到,json中为不同的语言·都配置不同的命令,以 C++为例:

gn文件中的defines g++ no input files_vscode_04


可以看到c++的执行命令是下面这一行:

cd $dir && g++ $fileName -o $fileNameWithoutExt && gn文件中的defines g++ no input files_c++_05fileNameWithoutExt

由于cd $dir 这个命名在需要切换的不同的盘时失效,我们自己加上/d字段就好了:

cd /d $dir && g++ $fileName -o $fileNameWithoutExt && gn文件中的defines g++ no input files_c++_05fileNameWithoutExt效果如下:

gn文件中的defines g++ no input files_gn文件中的defines_07

可以看到,尽管我们执行run code的命令时,我们还在在c盘目录,c++文件位于d盘中,但是命令还是执行成功了,并且我们可以发现,命令之后之后,当前目录已经切换到我们c++文件所在的目录了。
至此,问题解决了~