A Visual Studio Code extension to compile, run, and debug single C/C++ files easily.
- Compile, run, and debug C/C++ files directly from the command palette, status bar, or menu icons.
- Quick access via keybindings:
F6,F7,F5, and more. - Supports custom compiler paths, flags, and run arguments.
- Option to run in an external terminal.
- Linux: Install
gcc(setup instructions) - Windows: Install
tdm-gcc(setup instructions) - macOS: Install
clangorgcc(setup instructions)
- Open a
.cor.cppfile in VS Code. - Press F6 to compile and run the file with default settings.
- Press F7 to specify custom arguments before running.
- Press F5 to debug (includes compilation).
- Use the status bar or menu icons for quick access.
Tip: You can configure compiler paths, flags, and other options in the extension settings. Enable "Save Before Compile" to automatically save files before building.
| Key | Description |
|---|---|
| c-cpp-compile-run.c-compiler | The C compiler path (e.g. /usr/bin/gcc or C:\TDM-GCC-64\bin\gcc.exe) |
| c-cpp-compile-run.cpp-compiler | The C++ compiler path (e.g. /usr/bin/g++ or C:\TDM-GCC-64\bin\g++.exe) |
| c-cpp-compile-run.save-before-compile | Save the file before compiling |
| c-cpp-compile-run.c-flags | C compiler flags (default: -Wall -Wextra -g3) |
| c-cpp-compile-run.c-linker-flags | C linker flags (e.g. -lm) |
| c-cpp-compile-run.cpp-flags | C++ compiler flags (default: -Wall -Wextra -g3) |
| c-cpp-compile-run.cpp-linker-flags | C++ linker flags (e.g. -lm) |
| c-cpp-compile-run.run-args | Program arguments when running |
| c-cpp-compile-run.run-in-external-terminal | Run in an external terminal |
| c-cpp-compile-run.should-show-notifications | Show notifications |
| c-cpp-compile-run.output-location | Custom output location for the compiled file. Supports ${workspaceFolder} and ${pwd} variables. See Output Folder Mirroring |
| c-cpp-compile-run.custom-run-prefix | Prefix command before run (e.g. valgrind ./foobar) |
| c-cpp-compile-run.additional-include-paths | Additional directories to add to the compiler's include path (e.g. ["${workspaceFolder}/include"]) |
| c-cpp-compile-run.debugger-mimode | The MI debugger to use (gdb or lldb) |
| c-cpp-compile-run.debugger-path | Path to the debugger executable (e.g. /usr/bin/gdb) |
| c-cpp-compile-run.trust-single-files | Automatically trust single files opened without a workspace folder (default: true). When disabled, prompts for confirmation before compiling or running. |
| c-cpp-compile-run.skip-if-compiled | Skip compilation if the executable is already up-to-date (default: true). The check compares modification times of the source file, all header files (.h, .hpp, .hxx, .hh) found in the source directory and configured include paths, against the executable. Set to false to always recompile. |
You can configure the extension to mirror your source folder structure in a separate output directory.
For example, if your project is organized as:
myproj/
├── src/
│ ├── basics/
│ │ └── HelloWorld.cpp
│ └── functions/
│ └── Math.cpp
└── out/
And you set in your .vscode/settings.json:
{
"c-cpp-compile-run.output-location": "${workspaceFolder}/out"
}When you compile src/basics/HelloWorld.cpp, the executable will be placed at:
out/basics/HelloWorld.exe
The subfolder structure under src is mirrored under out, so both source and output files stay in the same relative location.
${workspaceFolder}will be replaced with your project's root folder.${pwd}will be replaced with your current working directory.
Example:
If your file is D:/myproj/src/functions/Math.cpp,
the output will be D:/myproj/out/functions/Math.exe.
This makes it easy to keep your build artifacts organized and separate from your source code, similar to Gradle/Java project layouts.
| Linux | Windows | Mac | Description |
|---|---|---|---|
| F6 | F6 | Cmd+R | Compile and run the file |
| Ctrl+6 | Ctrl+6 | Cmd+6 | Compile and run the file |
| F8 | F8 | Cmd+Y | Compile and run the file in an external console |
| F7 | F7 | Cmd+T | Compile and run the file with custom arguments and flags |
| F5 | F5 | Cmd+5 | Debug the file (includes compile) |
See the CHANGELOG for details.


