在C++开发中,除了使用集成开发环境自带的编译运行功能,通过终端手动编译并运行源文件是更贴近底层编译流程的操作方式,能够更清晰地理解程序从源码到可执行文件的过程,也适合需要快速验证代码片段的场景。

编译前的准备工作
在终端编译C++源文件前,需要先确认系统中已经安装了对应的编译器,主流的C++编译器是GCC套件中的g++,不同系统的安装方式略有区别。
检查编译器是否安装
打开终端,输入以下命令查看g++版本:
g++ --version
如果终端输出了g++的版本信息,说明编译器已经安装完成,可以直接进行后续操作。如果提示命令不存在,则需要根据系统安装编译器:
- Linux系统(以Ubuntu为例):执行
sudo apt update && sudo apt install g++命令安装 - macOS系统:安装Xcode命令行工具,执行
xcode-select --install命令即可 - Windows系统:可以安装MinGW或者Cygwin,配置好环境变量后使用g++命令
不同系统下的编译运行流程
Linux和macOS系统
假设我们有一个名为hello.cpp的C++源文件,内容如下:
#include <iostream>
int main() {
std::cout << "Hello, C++ Terminal Compile" << std::endl;
return 0;
}
第一步,在终端中切换到源文件所在的目录,例如源文件在桌面,执行命令:
cd ~/Desktop
第二步,执行编译命令,将源文件编译为可执行文件:
g++ hello.cpp -o hello
这里的hello.cpp是源文件名称,-o参数指定生成的可执行文件名为hello,如果不指定-o参数,默认会生成名为a.out的可执行文件。
第三步,运行生成的可执行文件:
./hello
执行后终端会输出Hello, C++ Terminal Compile,说明程序运行成功。
Windows系统(使用MinGW环境)
同样使用上面的hello.cpp源文件,首先打开MinGW对应的终端,切换到源文件所在目录,执行编译命令:
g++ hello.cpp -o hello.exe
Windows下的可执行文件默认后缀为exe,因此指定生成hello.exe,如果不指定后缀也会自动生成exe文件。运行可执行文件的命令为:
hello.exe
执行后同样会在终端输出对应的内容。
常用编译参数说明
在实际开发中,我们可以根据需求添加不同的编译参数,常见的参数如下:
| 参数 | 作用说明 |
|---|---|
| -std=c++11 | 指定使用C++11标准编译,同理可以使用-std=c++17指定C++17标准 |
| -Wall | 开启所有常用警告,帮助发现代码中的潜在问题 |
| -g | 生成调试信息,方便使用gdb等工具进行调试 |
| -O2 | 开启二级优化,提升生成的可执行文件的运行效率 |
例如我们需要使用C++11标准并开启警告编译上述文件,命令为:
g++ -std=c++11 -Wall hello.cpp -o hello
常见错误及解决办法
- 错误提示:
fatal error: iostream: No such file or directory,说明编译器没有找到对应的头文件,大概率是编译器没有安装正确,重新安装g++即可 - 错误提示:
undefined reference to 'xxx',说明链接阶段出现了问题,可能是函数只声明没有定义,或者缺少对应的库文件,需要检查代码逻辑或者添加链接的库参数 - 错误提示:
permission denied,说明没有可执行文件的运行权限,Linux和macOS系统可以执行chmod +x hello命令赋予权限后再运行
注意:编译命令中的源文件名称需要和实际的文件名称完全一致,包括后缀,否则会提示找不到源文件的错误。