GCC(GNU Compiler Collection)
GCC是一个强大的编译器套件,支持多种编程语言。GCC 由自由软件基金会(FSF)开发和维护,是 GNU 项目的一部分。GCC包含多个编译器前端和一个通用的后端。这个通用后端负责将中间表示(由前端生成的,通常是汇编代码)转换为目标机器代码。
gcc(GNU C Compiler)
gcc 是 GCC 的一个组成部分,它是 GCC 编译器集合中用于编译 C(以及其他语言)的命令行工具和驱动程序。用户通过 gcc 命令行工具来进行编译,而 gcc 内部会调用 GCC 编译器集合的其他组件来实际执行编译任务。
总结一下,“GCC” 是整个工具集的名字,“gcc” 是其中一个主要组件的名字,特指 C/C++ 的编译器。不过在日常交流中,“gcc” 经常被泛指整个 GCC 工具集。在现代环境中,“gcc” 往往被视为一个通用编译器,能够处理多种编程语言。
参数
-L
: 用于指定链接器搜索库文件的目录(如果这些库文件不在系统预定义的路径中)。包括静态库(.a)和共享库(.so)。-l
:用于指定链接时需要的库。如果库文件名为 libmylib.a 或 libmylib.so,则使用 -lmylib。-o
:指定输出文件的名称。目标文件(.o)、可执行文件、预处理输出文件(.i)、汇编代码文件(.s)等。-E
:仅执行预编译步骤。预处理器会处理所有的宏定义、文件包含和条件编译指令。-S
:将源代码编译成汇编代码,而不进行汇编和链接。-c
:从源文件编译生成目标文件(.o 文件),而不进行链接。-I
: 指定预处理器搜索头文件的目录。当头文件不在默认搜索路径中时,可以使用此选项添加自定义路径。-iquote
: 指定以引号指定的头文件的目录。如(#include “foo.h”),不影响尖括号的寻找路径。-include
: 指定在每个编译单元的开头包含指定的头文件。它主要用于确保某个头文件在编译任何源文件之前被包含。-isystem
: 用于指定系统头文件的搜索路径,这些路径中的头文件通常被认为是可信赖的,不会触发警告信息。-g
: 用于生成包含调试信息的可执行文件。供调试器(如 gdb)进行调试。-D
: 用于定义预处理器宏,如-DDEBUG
,定义了一个名为DEBUG的宏。
使用-v选项可以查看详细的编译过程
假设我们有以下项目结构:
main.c
foo.c
foo.h
% gcc foo.c main.c -o main -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
"/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple arm64-apple-macosx14.0.0 -Wundef-prefix=TARGET_OS_ -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name foo.c -mrelocation-model pic -pic-level 2 -mframe-pointer=non-leaf -fno-strict-return -ffp-contract=on -fno-rounding-math -funwind-tables=1 -fobjc-msgsend-selector-stubs -target-sdk-version=14.4 -fvisibility-inlines-hidden-static-local-var -target-cpu apple-m1 -target-feature +v8.5a -target-feature +crc -target-feature +lse -target-feature +rdm -target-feature +crypto -target-feature +dotprod -target-feature +fp-armv8 -target-feature +neon -target-feature +fp16fml -target-feature +ras -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -debugger-tuning=lldb -target-linker-version 1053.12 -v -fcoverage-compilation-dir=/Users/buttering/pcc/pcc/functest/link_lib -resource-dir /Library/Developer/CommandLineTool