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 terminal command in Linux, enhancing your development workflow and productivity.
Developing in C++ on Linux often involves a two-step process: compiling your source code into an executable, and then running that executable. While straightforward, this can become repetitive during rapid development cycles. This article will guide you through combining these steps into a single, efficient command, leveraging the power of the Linux terminal and common C++ compilers like GCC/G++.
The Basics: Compiling and Running Separately
Before we combine the commands, let's review the standard procedure for compiling and running a C++ program. We'll use a simple 'Hello, World!' example. The g++
command is the GNU C++ compiler, widely used in Linux environments. The -o
flag specifies the output file name for the executable.
#include <iostream>
int main() {
std::cout << "Hello, Linux C++!" << std::endl;
return 0;
}
g++ hello_world.cpp -o hello_world
./hello_world
Separate compilation and execution commands
Combining Commands with Logical Operators
Linux shell provides powerful logical operators that allow you to chain commands. The &&
operator is particularly useful here: it executes the second command only if the first command succeeds (returns an exit status of 0). This ensures that you only attempt to run the program if it compiled without errors.
g++ hello_world.cpp -o hello_world && ./hello_world
Compile and run using the '&&' operator
&&
operator is crucial for robust scripting. If g++
encounters a compilation error, it will return a non-zero exit status, and ./hello_world
will not be executed, preventing you from running an outdated or broken executable.Adding Compiler Flags and Cleanup
For more complex projects, you'll often want to include compiler flags for warnings, optimization, or debugging. You might also want to automatically clean up the generated executable after running, especially for quick tests. We can extend our one-liner to include these aspects.
g++ -Wall -Wextra hello_world.cpp -o hello_world && ./hello_world && rm hello_world
Compile with warnings, run, and then remove the executable
rm
in automated commands. Ensure you are deleting the correct file to avoid accidental data loss. For development, it's often better to keep the executable unless you have a specific reason to remove it immediately.
Workflow of the combined compile and run command
Using Aliases for Ultimate Efficiency
To make this one-command approach even more convenient, you can create a shell alias. An alias is a shortcut that replaces a long command with a shorter, custom name. This is particularly useful if you frequently compile and run C++ files with specific flags.
alias crun='g++ -Wall -Wextra $1 -o a.out && ./a.out && rm a.out'
crun hello_world.cpp
Creating and using a shell alias for compile and run
To make an alias permanent, you need to add it to your shell's configuration file (e.g., ~/.bashrc
for Bash or ~/.zshrc
for Zsh). After adding, run source ~/.bashrc
(or ~/.zshrc
) to apply the changes without restarting your terminal.
1. Open your shell configuration file
Use a text editor like nano
or vim
to open your shell's configuration file. For Bash, this is typically ~/.bashrc
.
2. Add the alias definition
Append the alias definition, for example, alias crun='g++ -Wall -Wextra $1 -o a.out && ./a.out && rm a.out'
, to the end of the file.
3. Save and close the file
Save your changes and exit the text editor.
4. Source the configuration file
Apply the changes by running source ~/.bashrc
(or your respective shell config file) in your terminal. Now, the crun
command will be available in new and existing terminal sessions.