gcc命令

好的,gcc(GNU Compiler Collection)是功能非常强大的编译器套件,用于编译C、C++等程序。其命令(参数/选项)繁多,但掌握一些核心和常用的就能应对绝大多数场景。

基本命令语法

1
gcc [options] [source_files] [object_files] [-o output_file]
  • gcc: 命令本身。编译C++程序时通常使用 g++
  • [options]: 选项,控制编译过程的各个阶段(预处理、编译、汇编、链接)和行为。这是核心,以 --- 开头。
  • [source_files]: 一个或多个源代码文件,例如 main.c, utils.c
  • [object_files]: (可选)一个或多个目标文件(.o.obj),用于链接。
  • [-o output_file]: 指定最终生成的可执行文件的名称。

分步编译流程与对应命令

一个完整的编译过程包含四个阶段,你可以用 gcc 选项控制停在某个阶段或一次性完成。

  1. 预处理 (Preprocessing)

    • 作用:处理宏定义(#define)、包含头文件(#include)、条件编译(#ifdef)等。
    • 命令
      1
      gcc -E main.c -o main.i
    • 选项
      • -E: 让编译器在预处理后停止。
      • -o main.i: 将预处理后的结果输出到 main.i 文件(通常是 .i 后缀)。
  2. 编译 (Compilation)

    • 作用:将预处理后的代码(*.i编译汇编代码(Assembly Code)。
    • 命令
      1
      2
      3
      4
      5
      # 从上一步的 .i 文件开始
      gcc -S main.i -o main.s

      # 或者直接从源文件开始,完成预处理和编译两步,生成 .s 文件
      gcc -S main.c -o main.s
    • 选项
      • -S: 让编译器在编译后停止,生成汇编文件(通常是 .s 后缀)。
  3. 汇编 (Assembly)

    • 作用:将汇编代码汇编机器代码(目标文件)。
    • 命令
      1
      2
      3
      4
      5
      # 从上一步的 .s 文件开始
      gcc -c main.s -o main.o

      # 或者直接从源文件开始,完成预处理、编译、汇编三步,生成 .o 文件
      gcc -c main.c -o main.o
    • 选项
      • -c: 让编译器在汇编后停止,生成目标文件(通常是 .o.obj 后缀)。这是多文件编译的关键。
  4. 链接 (Linking)

    • 作用:将一个或多个目标文件(.o)以及所需的库文件(如C标准库 libc.a链接在一起,生成最终的可执行文件。
    • 命令
      1
      2
      3
      4
      5
      # 链接一个目标文件
      gcc main.o -o my_program

      # 链接多个目标文件
      gcc main.o utils.o -o my_program
    • 如果没有 -c, -S, -E 选项,gcc 默认会执行所有阶段,直接生成可执行文件。
      1
      2
      # 最简单的用法:直接从一个.c文件生成可执行程序
      gcc main.c -o my_program

常用且重要的选项

选项 全称 说明与示例
-o <file> Output 指定输出文件名
gcc main.c -o hello.exe (Windows)
gcc main.c -o hello (Linux/macOS)
-c Compile 只编译不链接,生成目标文件 .o。用于多文件分开编译。
gcc -c main.c → 生成 main.o
gcc -c utils.c → 生成 utils.o
-g Debug 在可执行文件中添加调试信息(如GDB使用)。
gcc -g main.c -o my_program
-O<level> Optimize 优化级别<level> 通常是 0, 1, 2, 3。
-O0: 不优化(调试时常用)。
-O2: 常用发布优化级别。
gcc -O2 main.c -o fast_program
-Wall Warnings: all 开启大部分常用的警告强烈建议始终使用!
gcc -Wall main.c -o program
-Wextra Warnings: extra 开启额外的警告。
-Werror Warnings: error 将所有警告视为错误。严格要求代码质量时使用。
-I<dir> Include 指定头文件(#include)的额外搜索目录
gcc -I./include main.c (会在 ./include 目录下查找头文件)
-L<dir> Library path 指定库文件的额外搜索目录
gcc -L./lib main.o -o program
-l<library> Library 链接指定的库。库名是 lib<name>.alib<name>.so,例如 libmath.a-lmath
gcc main.o -lm -o program (链接数学库)
-D<name>[=value] Define 在命令行定义宏,相当于在代码里写 #define
gcc -DDEBUG main.c (定义 DEBUG 宏)
gcc -DVERSION=1.0 main.c (定义 VERSION 宏并赋值为 1.0
-std=<standard> Standard 指定使用的C语言标准
gcc -std=c99 main.c
gcc -std=c11 main.c
gcc -std=c17 main.c

综合示例

假设你有两个文件:main.chelper.c,以及一个头文件 helper.h./include 目录下。你想编译一个带调试信息、高警告级别并优化最终程序。

1. 分步编译(推荐用于大型项目)

1
2
3
4
5
6
# 1. 分别编译每个源文件为目标文件
gcc -Wall -Wextra -g -I./include -c main.c -o main.o
gcc -Wall -Wextra -g -I./include -c helper.c -o helper.o

# 2. 将目标文件链接成最终可执行程序
gcc main.o helper.o -o my_app

2. 一步到位(适用于小项目)

1
gcc -Wall -Wextra -g -I./include main.c helper.c -o my_app

3. 链接外部库(例如数学库 libm.a

1
2
gcc -Wall main.c -o calc -lm
# 注意:-lm 必须放在源文件/目标文件后面

希望这个详细的总结能帮助你更好地理解和使用 gcc


gcc命令
https://mingzaitown.github.io/2025/10/29/gcc命令/
作者
MingZai
发布于
2025年10月30日
许可协议