编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。以下是一些主流的C++编译器及其简要用法:
GNU Compiler Collection (GCC):’
GCC原名GNU C Compiler,后来逐渐支持更多的语言编译(C++、Fortran、Pascal、Objective-C、Java、Ada、Go等),所以变成了GNU Compiler Collection(GNU编译器套装),是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布,是大多数类Unix(如Linux、BSD、Mac OS X等)的标准编译器,而且适用于Windows(借助其他移植项目实现的,比如MingW、Cygwin等)。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。
安装:在大多数Linux发行版上,你可以使用包管理器安装GCC。例如,在Ubuntu上,可以运行 sudo apt-get install g++
。
编译:使用命令 g++
后接源文件名,例如 g++ myfile.cpp
。
生成可执行文件:./a.out
(默认输出文件名)。
Clang:
sudo apt-get install clang
。clang++
后接源文件名,例如 clang++ myfile.cpp
。./a.out
(默认输出文件名)。Microsoft Visual C++ Compiler:
cl
命令。例如,cl myfile.cpp
编译源文件。Intel C++ Compiler:
icpc
后接源文件名,例如 icpc myfile.cpp
。./a.out
(默认输出文件名)。MinGW-w64:
g++
后接源文件名,例如 g++ myfile.cpp
。./a.exe
(默认输出文件名)。一个现代编译器的主要工作流程:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。
以G++为例,编译一个cpp程序的代码为:
预处理:g++ -E main.cpp -o main.i
编译:g++ -S main.i -o main.s
汇编:g++ -c main.s -o main.o
链接:g++ main.o -o main
命令汇总:g++ main.cpp -o main
多文件一起编译:g++ main.cpp test.cpp -o main
C++编译器通常提供许多编译选项,这些选项允许你指定如何进行代码生成、优化、调试信息等方面的设置。以下是一些常见的C++编译选项:
-c
: 生成目标文件而不进行链接,产生.o
或.obj
文件,用于后续的链接阶段。
g++ -c myfile.cpp
-o
: 指定输出文件的名称。
g++ myfile.cpp -o myexecutable
-g
: 包含调试信息,方便在调试器中进行源代码级别的调试。
g++ -g myfile.cpp
-Wall
: 开启常见的警告信息,有助于发现潜在的问题。
g++ -Wall myfile.cpp
-O
: 启用各种优化级别,可以是 -O1
, -O2
, -O3
等。
g++ -O2 myfile.cpp
-std
: 指定所使用的C++标准版本。
g++ -std=c++11 myfile.cpp
-I
: 指定包含文件的搜索路径。
g++ -I/path/to/include myfile.cpp
-L
: 指定库文件的搜索路径。
g++ -L/path/to/lib myfile.cpp
-l
: 指定要链接的库。
g++ myfile.cpp -lmylibrary
-D
: 定义预处理宏。
g++ -DDEBUG myfile.cpp
-E
:预处理(Preprocess)
.i
扩展名。g++ -E main.cpp -o main.i
-S
:生成汇编代码(Generate Assembly)
.s
扩展名。g++ -S main.i -o main.s