Compiling and running C++ code with one command in Linux
Categories:
Streamlining C++ Development: Compile and Run with One Command in Linux

Learn how to efficiently compile and execute C++ programs using a single command in the Linux terminal, enhancing your development workflow.
Developing in C++ on Linux often involves a two-step process: compiling your source code into an executable, and then running that executable. While this approach is standard, it can become repetitive during rapid development or testing cycles. This article will guide you through combining these steps into a single, convenient command, significantly speeding up your workflow. We'll cover the basics of compilation, introduce the && operator for command chaining, and provide practical examples.
Understanding C++ Compilation in Linux
Before we combine commands, it's crucial to understand the individual steps. The GNU Compiler Collection (GCC), specifically g++ for C++, is the de facto standard compiler on most Linux distributions. A typical compilation command takes your source file(s) and produces an executable file. Once compiled, you can then execute the program.
g++ my_program.cpp -o my_program
./my_program
Standard compilation and execution commands
In the example above, g++ my_program.cpp -o my_program compiles my_program.cpp and names the output executable my_program. The -o flag specifies the output file name. If omitted, the executable would default to a.out. The ./my_program command then executes the compiled program. The ./ prefix is necessary to tell the shell to look for the executable in the current directory, as it's typically not in the system's PATH.
Chaining Commands with the && Operator
The && operator in the Linux shell is a powerful tool for command chaining. It acts as a logical AND: the command to its right will only execute if the command to its left completes successfully (i.e., returns an exit status of 0). This is perfect for our use case, as we only want to run the C++ program if it compiles without errors.

Flow of command execution using &&
&& is safer than ; (which executes commands sequentially regardless of success) because it prevents running a potentially outdated or non-existent executable if compilation fails.The One-Command Solution
By combining the compilation and execution commands with &&, we achieve our goal of a single-line workflow. This command will first attempt to compile your C++ source file. If compilation is successful, it will then immediately run the resulting executable.
g++ my_program.cpp -o my_program && ./my_program
Compile and run C++ with a single command
Let's break down a practical example. Consider a simple 'Hello, World!' program.
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
hello_world.cpp
1. Create the C++ file
Save the above code as hello_world.cpp in your desired directory.
2. Open your terminal
Navigate to the directory where you saved hello_world.cpp.
3. Execute the combined command
Type g++ hello_world.cpp -o hello_world && ./hello_world and press Enter.
You should see Hello, World! printed to your terminal. If there were any compilation errors, the program would not have run, and you would only see the compiler's error messages.
g++ installed on your system. If not, you can usually install it using your distribution's package manager (e.g., sudo apt install build-essential on Debian/Ubuntu or sudo dnf install gcc-c++ on Fedora).Advanced Usage and Considerations
For more complex projects with multiple source files, you'll typically use a Makefile or a build system like CMake. However, for single-file programs or quick tests, the one-command approach remains highly effective. You can also add compiler flags for optimization or debugging.
g++ -std=c++17 -Wall -O2 my_program.cpp -o my_program && ./my_program
Combined command with common compiler flags
Here, -std=c++17 specifies the C++ standard, -Wall enables all common warnings, and -O2 applies level 2 optimizations. These flags are passed directly to g++ before the output executable is specified.
alias crun='g++ $1 -o ${1%.*} && ./${1%.*}' could compile and run a C++ file passed as an argument.