cpp 编译工具一览

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
### C++ 编译器工具推荐 #### GCC (GNU Compiler Collection) GCC 是一个广泛使用的开源编译器集合,不仅限于 C 和 C++,还支持多种其他编程语言。其主要优点在于跨平台兼容性强,在 Linux、macOS 及 Windows 上均有良好表现[^1]。 ```cpp // 使用 g++ 编译命令示例 g++ hello.cpp -o hello_world ``` #### Clang Clang 作为 LLVM 项目的一部分,以其快速的编译速度和优秀的诊断信息著称。相较于 GCC 更加现代化的设计使得 Clang 在处理某些复杂语法结构时更具优势。 ```cpp // 使用 clang++ 编译命令示例 clang++ hello.cpp -o hello_world ``` #### Microsoft Visual Studio with VC++ 对于希望开发基于 Windows 平台的应用程序来说,Microsoft 提供的 Visual Studio 集成了强大的集成开发环境以及高效的 C++ 编译器——VC++。该组合特别适合企业级应用开发,提供了丰富的调试功能和支持库。 ```cpp // 使用 MSBuild 或者通过 VS IDE 进行构建 MSBuild.exe MyProject.sln /t:Rebuild /p:Configuration=Release;Platform=x64 ``` #### Rextester 在线IDE 除了本地安装上述三种主流编译器之外,如果只是想要简单测试一些代码片段而不必配置复杂的开发环境,则可以考虑使用像 Rextester 这样的在线服务。这类网站通常预装了多个版本的不同编译器(如 gcc, clang, vc++),并且具备基本的编辑特性比如语法高亮显示等[^2]。 ```cpp // 用户可以直接在网页上编写并运行简单的 C++ 程序而无需额外设置任何东西。 int main() { std::cout << "Hello from Rextester!"; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值