我一直在寻找这个问题的答案,但似乎找不到。我知道我们可以使用task.json文件来自动化构建过程。但是我想使用Visual Studio Code在C ++中实现用于竞争性编程的算法。我希望能够编译一个程序,并在没有任何错误的情况下一次性运行所有程序。如果有错误,我希望显示它们。
此外,Visual Studio代码带有集成的终端,因此,如果可以将程序输出重定向到那里,那就太好了。 另外,我们如何映射键盘快捷键来运行此任务。
我在Windows 10上使用MinGW G ++编译器使用Visual Studio Code 2019。
编辑
我在下面尝试了Escape0707的答案,并且尝试使用默认的键绑定'Run Code'
执行Ctrl + Alt + N
,但出现此错误。
答案 0 :(得分:2)
请考虑使用Code Runner
,因为(对我而言)这似乎比VSCode的内置调试过程快得多,后者可用于处理许多小型C ++代码文件。我将描述如何使用该扩展名来满足类似的要求。
PATH
配置为包括clang++
,以便可以从集成终端中调用它。
您也可以将
g++
替换为clang++
,然后使用g++
。我更喜欢clang++
,因为它可以为像我这样的C ++初学者提供更严格的检查。
settings.json
中,考虑添加以下条目:
"code-runner.clearPreviousOutput": true,
"code-runner.preserveFocus": false,
"code-runner.runInTerminal": true,
"code-runner.saveFileBeforeRun": true
code-runner.executorMap
添加到用户/工作区设置,该设置描述了当当前文件名的扩展名符合指定扩展名时,您希望扩展发送至终端的命令。例如:
"code-runner.executorMap": {
"cpp": "\b\b\b\b\b\b\b\b\b\bclang++ -std=c++17 $fileName -o a.out && ./a.out"
},
上面的设置告诉扩展名:“当看到.cpp
文件时,向终端发送10个 Backspace (以删除所有错误键入的字符)并调用clang++ -std=c++17 *filename* -o a.out && ./a.out
。
我在Windows的Linux机器上使用此命令,尝试将输出文件的文件扩展名更改为
.exe
,然后用.\a.exe
或简单地a.exe
调用它。
Run Code
命令映射到VSCode的“键盘快捷键”设置中的首选键绑定。我的是将其绑定到最初绑定到Debug: Continue
的 F5 。祝您编程愉快!
make
请继续阅读以了解如何避免利用GNU make
进行冗余的编译过程并加速案例测试。我将在Linux上并且仅在C ++上执行此操作,因为我没有在Windows或OS X上使用make
,而C ++最适合ACM。
make
并且在您的PATH
中Makefile
的同一目录下创建一个名为makefile
(或make
)的文件。 (或在另一个目录和make -f /path/to/Makefile
中)。Makefile
中将编译器选项重新定义为您喜欢的任何选项,例如:
CXX = clang++
CXXFLAGS = -std=c++17 -g -Weverything -Werror
*.out
中为Makefile
创建自动定位规则,即:
%.out: %.cpp
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
注意:必须使用 Tab 缩进第二行,而不是 Space s。
code-runner.executorMap
更改为:
"code-runner.executorMap": {
"cpp": "\b\b\b\b\b\b\b\b\b\bmake $fileNameWithoutExt.out && ./$fileNameWithoutExt.out"
*.out
的{{1}}:
git
echo "*.out" >> .gitignore
:
*.out
现在,rm *.out
命令将调用Run Code
,而make
仅在相应的make
文件比{{1}更新时才重新生成.out
文件。 }文件,这样我们就可以跳过编译过程并更轻松地进行案例测试。
.cpp
用于C ++编译器选项,.out
用于C编译器选项。您可以使用CXXFLAGS
,Google和GNU make
manual#Automatic-Variables找到其他语言编译器选项及其变量名。
答案 1 :(得分:2)
要使用VS代码构建/运行C ++项目,您需要手动配置tasks.json
文件,该文件位于工作区文件夹.vscode文件夹中。要打开tasks.json
,请按ctrl + shift + P
,然后输入配置任务,然后按Enter,它将带您到tasks.json
在这里,我为tasks.json
文件提供了一些注释,以使文件更易于理解,可以将其用作配置tasks.json
的参考,希望它会有用
配置tasks.json
后,要编译并运行c ++文件,请按ctrl+shift+B
,这是在vscode中运行构建工具的快捷方式。您的C ++程序现在只能在vscode集成终端上运行。
如果出现问题,则将默认终端更改为cmd(默认为Windows中的powershell),并确保文件路径中没有空格。
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build & run", //It's name of the task , you can have several tasks
"type": "shell", //type can be either 'shell' or 'process' , more details will be given below
"command": "g++",
"args": [
"-g", //gnu debugging flag , only necessary if you want to perform debugging on file
"${file}", //${file} gives full path of the file
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}", //output file name
"&&", //to join building and running of the file
"${workspaceFolder}\\${fileBasenameNoExtension}"
],
"group": {
"kind": "build", //defines to which group the task belongs
"isDefault": true
},
"presentation": {
"echo": false,
"reveal": "always",
"focus": true,
"panel": "shared",
"clear": false,
"showReuseMessage": false
},
"problemMatcher": "$gcc"
},
]
}
presentation
的{{1}}中的所有属性仅用于根据您的需要自定义构建任务,可以随时将其更改为您最喜欢的属性。您可以在vscode tasks documentations