如何在Visual Studio代码中编译和运行C ++源文件

时间:2019-10-10 05:08:58

标签: c++ visual-studio-code

我一直在寻找这个问题的答案,但似乎找不到。我知道我们可以使用task.json文件来自动化构建过程。但是我想使用Visual Studio Code在C ++中实现用于竞争性编程的算法。我希望能够编译一个程序,并在没有任何错误的情况下一次性运行所有程序。如果有错误,我希望显示它们。

此外,Visual Studio代码带有集成的终端,因此,如果可以将程序输出重定向到那里,那就太好了。 另外,我们如何映射键盘快捷键来运行此任务。

我在Windows 10上使用MinGW G ++编译器使用Visual Studio Code 2019。

编辑

我在下面尝试了Escape0707的答案,并且尝试使用默认的键绑定'Run Code'执行Ctrl + Alt + N,但出现此错误。

enter image description here

2 个答案:

答案 0 :(得分:2)

请考虑使用Code Runner,因为(对我而言)这似乎比VSCode的内置调试过程快得多,后者可用于处理许多小型C ++代码文件。我将描述如何使用该扩展名来满足类似的要求。

  1. 确保已将PATH配置为包括clang++,以便可以从集成终端中调用它。
      

    您也可以将g++替换为clang++,然后使用g++。我更喜欢clang++,因为它可以为像我这样的C ++初学者提供更严格的检查。

  2. 安装扩展程序。
  3. 在VSCode的settings.json中,考虑添加以下条目:
    "code-runner.clearPreviousOutput": true,
    "code-runner.preserveFocus": false,
    "code-runner.runInTerminal": true,
    "code-runner.saveFileBeforeRun": true
    
  4. 并将最后一个自定义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调用它。

  5. 最后,将Run Code命令映射到VSCode的“键盘快捷键”设置中的首选键绑定。我的是将其绑定到最初绑定到Debug: Continue F5

祝您编程愉快!


关于make

的更新

请继续阅读以了解如何避免利用GNU make进行冗余的编译过程并加速案例测试。我将在Linux上并且仅在C ++上执行此操作,因为我没有在Windows或OS X上使用make,而C ++最适合ACM。

  1. 确保已安装make并且在您的PATH
  2. 在调用Makefile的同一目录下创建一个名为makefile(或make)的文件。 (或在另一个目录和make -f /path/to/Makefile中)。
  3. Makefile中将编译器选项重新定义为您喜欢的任何选项,例如:
    CXX = clang++
    CXXFLAGS = -std=c++17 -g -Weverything -Werror
    
  4. *.out中为Makefile创建自动定位规则,即:
    %.out: %.cpp
        $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
    
      

    注意:必须使用 Tab 缩进第二行,而不是 Space s。

  5. code-runner.executorMap更改为:
    "code-runner.executorMap": {
        "cpp": "\b\b\b\b\b\b\b\b\b\bmake $fileNameWithoutExt.out && ./$fileNameWithoutExt.out"
    
  6. (可选)忽略*.out的{​​{1}}:
    git
  7. (可选)要删除当前目录中的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

上了解演示文稿属性(及其他内容)