在 Ubuntu 上,最常用、最标准的 C 语言编译器是 GCC (GNU Compiler Collection),你不需要单独下载它,因为它已经包含在 Ubuntu 的标准开发工具包中。

安装编译器工具链
虽然你的 Ubuntu 系统可能已经预装了 GCC,但为了确保拥有完整的编译环境(包括编译器、链接器、调试器等),最推荐的做法是安装 build-essential 这个元数据包。
使用 apt(推荐,适用于所有现代 Ubuntu 版本)
打开你的终端(Terminal),然后执行以下命令:
# 1. 更新软件包列表(这是一个好习惯) sudo apt update # 2. 安装 build-essential 包 sudo apt install build-essential
这个命令会自动安装 GCC、G++ (C++ 编译器)、make 以及其他一些构建软件所必需的核心工具。
手动安装 GCC
如果你想单独安装 GCC 或查看版本,也可以这样做:

# 安装 gcc sudo apt install gcc # 如果需要 C++ 编译器 sudo apt install g++ # 安装 GDB 调试器 sudo apt install gdb
如何验证安装?
安装完成后,你可以通过以下命令检查 GCC 的版本,以确认安装是否成功:
gcc --version
你应该会看到类似下面的输出,版本号可能不同:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译和运行 C 程序的完整流程
这里我们通过一个经典的 "Hello, World!" 示例来走一遍完整的流程。
步骤 1:创建源代码文件
使用你喜欢的文本编辑器(如 vim, nano, 或者 VS Code)创建一个名为 hello.c 的文件。

# 使用 nano 编辑器(简单易用) nano hello.c
将以下代码粘贴到 hello.c 文件中,然后保存并退出(在 nano 中是 Ctrl+X,然后按 Y,再按 Enter)。
#include <stdio.h>
int main() {
printf("Hello, Ubuntu!\n");
return 0;
}
步骤 2:编译源代码
使用 gcc 命令来编译 hello.c 文件。
gcc hello.c
执行这个命令后,gcc 会:
- 读取
hello.c源文件。 - 进行预处理、编译、汇编和链接。
- 如果没有错误,它会生成一个默认的可执行文件,在 Linux 中这个文件通常名为
a.out。
你可以使用 ls 命令来查看当前目录下的文件:
ls # 你应该会看到 hello.c 和 a.out
步骤 3:运行可执行文件
生成的 a.out 文件就是一个可以直接运行的程序,在终端中输入以下命令来执行它:
./a.out
注意: 是必需的,它告诉终端在当前目录下查找并执行这个程序,如果你只输入 a.out,系统可能会找不到它。
你应该会在终端看到输出:
Hello, Ubuntu!
步骤 4:指定输出文件名(良好习惯)
默认的输出文件名 a.out 不够直观,我们可以使用 -o 选项来指定一个更有意义的文件名,hello。
# -o 后面跟着你想要的输出文件名 gcc hello.c -o hello
使用 ls 查看,你会看到 hello 文件(而不是 a.out)。
ls # 你会看到 hello.c 和 hello
运行它:
./hello
输出结果是一样的。指定输出文件名是一个非常重要的好习惯,尤其是在处理多个源文件的项目时。
常用 GCC 编译选项
GCC 提供了非常丰富的选项来控制编译过程,这里列出一些最常用的:
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-o |
--output= |
指定输出的可执行文件名。 | gcc main.c -o my_program |
-c |
--compile |
只编译不链接,生成目标文件 (.o 文件)。 |
gcc -c main.c -o main.o |
-g |
--generate-debug |
在可执行文件中包含调试信息,用于 GDB 等调试器。 | gcc -g hello.c -o hello_debug |
-O0, -O1, -O2, -O3 |
--optimize= |
设置优化级别。-O0 无优化(编译最快,调试方便),-O2 是常用的优化级别,-O3 优化级别最高。 |
gcc -O2 hello.c -o hello_optimized |
-Wall |
--warn-all |
启用所有常见的警告。强烈推荐在开发时使用。 | gcc -Wall hello.c -o hello |
-std= |
--standard= |
指定 C 语言标准,如 c89, c99, c11, c17 (或 gnu89, gnu99 等)。 |
gcc -std=c11 hello.c -o hello |
综合示例:
一个专业的、推荐的编译命令应该是这样的:
# 使用 C11 标准,开启所有警告,包含调试信息,并进行优化 gcc -std=c11 -Wall -g -O2 hello.c -o hello
使用 Make 进行项目管理
当你的项目变得越来越大,有多个 .c 文件和 .h 文件时,在命令行中手动编译会变得非常繁琐和容易出错,这时,Make 工具就派上用场了。
Make 通过一个名为 Makefile 的文件来管理项目的编译规则。
创建一个简单的多文件项目
假设你有以下文件:
main.cutils.cutils.h
utils.h (头文件)
#ifndef UTILS_H #define UTILS_H int add(int a, int b); #endif
utils.c (源文件)
#include "utils.h"
int add(int a, int b) {
return a + b;
}
main.c (主程序)
#include <stdio.h>
#include "utils.h"
int main() {
int result = add(5, 3);
printf("The result is: %d\n", result);
return 0;
}
创建 Makefile
在项目根目录下创建一个名为 Makefile 的文件(注意没有后缀名)。
# 定义变量
CC = gcc
CFLAGS = -Wall -g -std=c11
TARGET = my_app
SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)
# 默认目标 (当只输入 make 时执行的规则)
all: $(TARGET)
# 链接规则:从 .o 文件生成最终的可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 编译规则:从 .c 文件生成 .o 文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则:删除所有生成的文件
clean:
rm -f $(OBJS) $(TARGET)
Makefile 语法解释:
CC = gcc:定义一个变量CC,值为gcc。TARGET = my_app:定义最终要生成的可执行文件名。SRCS和OBJS:自动获取所有源文件和对应的目标文件。all: $(TARGET):all是一个伪目标,它依赖于$(TARGET)(即my_app),这意味着执行make时,会先尝试构建my_app。$(TARGET): $(OBJS):my_app的构建规则,它依赖于所有的.o文件,执行时,make会先确保所有.o文件都已生成。%.o: %.c:这是一个模式规则,表示如何从任何.c文件生成对应的.o文件。- ,
$<,$^:这些都是自动化变量。- 代表当前规则的目标文件名。
$<:代表第一个依赖文件名。$^:代表所有的依赖文件名。
使用 Make
在你的项目目录下,只需运行 make 命令:
make
make 会读取 Makefile 并自动执行必要的编译和链接步骤:
gcc -Wall -g -std=c11 -c main.c -o main.o
gcc -Wall -g -std=c11 -c utils.c -o utils.o
gcc -Wall -g -std=c11 -o my_app main.o utils.o
然后运行你的程序:
./my_app
输出:
The result is: 8
如果你想清理掉所有编译生成的文件,只需运行:
make clean
| 任务 | 命令/工具 | 描述 |
|---|---|---|
| 安装环境 | sudo apt install build-essential |
安装 GCC, G++, make 等核心工具。 |
| 编译单个文件 | gcc source.c -o program |
将 source.c 编译成名为 program 的可执行文件。 |
| 运行程序 | ./program |
执行当前目录下的 program。 |
| 专业编译 | gcc -std=c11 -Wall -g source.c -o program |
推荐的编译参数,包含标准、警告和调试信息。 |
| 项目管理 | make |
使用 Makefile 自动化管理多文件项目的编译。 |
希望这份详细的指南能帮助你在 Ubuntu 上顺利地进行 C 语言开发!
