学习如何搭建 C 语言开发环境,为后续开发俄罗斯方块游戏做好准备。
C 语言是编译型语言,源代码需要转换成机器码才能运行。GCC(GNU Compiler Collection)是最常用的 C 语言编译器。
源代码 (.c) → [编译器] → 可执行文件
↓ ↓
人类可读 机器可读
当项目有多个源文件时,每次都用长长的命令编译很麻烦。Make 工具通过 Makefile 自动化编译过程。
ncurses 是一个终端图形库,让我们能在命令行中绘制边框、颜色、字符图形。俄罗斯方块的界面就靠它。
# 更新软件包列表
sudo apt update
# 安装编译器和必要工具
sudo apt install build-essential gcc make gdb
# 安装 ncurses 开发库
sudo apt install libncurses5-dev
命令解释:
sudo - 以管理员权限运行apt - Ubuntu 的包管理器build-essential - 包含 gcc、make 等基础开发工具gdb - GNU 调试器,用于调试程序libncurses5-dev - ncurses 库的开发文件(头文件和库文件)# 安装开发工具组
sudo dnf groupinstall "Development Tools"
# 安装 ncurses 开发库
sudo dnf install ncurses-devel
# 安装 Xcode 命令行工具
xcode-select --install
# 使用 Homebrew 安装 ncurses
brew install ncurses
安装完成后,验证工具是否正确安装:
# 检查 GCC 版本
gcc --version
# 输出示例:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
# 检查 Make 版本
make --version
# 输出示例:GNU Make 4.3
# 检查 ncurses 是否可用
pkg-config --libs ncurses
# 输出:-lncurses
如果看到版本号输出,说明安装成功!✅
# 进入项目目录
cd ~/Work/open_learn/c_proj/tetris
# 查看项目结构
ls -la
预期输出:
total 68
drwxr-xr-x src/ # 源代码目录
drwxr-xr-x docs/ # 教程文档
drwxr-xr-x data/ # 游戏数据(最高分)
-rw-r--r-- Makefile # 构建配置
-rw-r--r-- README.md # 项目说明
make
编译过程详解:
# Makefile 会执行以下命令(你不需要手动输入)
# 1. 创建 obj 目录
mkdir -p obj
# 2. 编译每个 .c 文件为 .o 文件
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/board.c -o obj/board.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/game.c -o obj/game.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/input.c -o obj/input.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/main.c -o obj/main.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/render.c -o obj/render.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/score.c -o obj/score.o
gcc -Wall -Wextra -std=c99 -Isrc -O2 -c src/tetromino.c -o obj/tetromino.o
# 3. 链接所有 .o 文件,生成可执行文件
gcc obj/*.o -o tetris -lncurses
编译选项解释:
| 选项 | 含义 | 作用 |
|——|——|——|
| -Wall | Warning All | 显示所有警告 |
| -Wextra | Warning Extra | 显示额外警告 |
| -std=c99 | Standard C99 | 使用 C99 标准 |
| -Isrc | Include src | 在 src 目录查找头文件 |
| -O2 | Optimize 2 | 二级优化,提高运行速度 |
| -c | Compile only | 只编译,不链接 |
| -lncurses | Library ncurses | 链接 ncurses 库 |
make run
# 等价于 ./tetris
make clean
# 删除 obj/ 目录和 tetris 可执行文件
gcc: command not found原因: 未安装 GCC 编译器
解决:
sudo apt install build-essential # Ubuntu
sudo dnf groupinstall "Development Tools" # Fedora
ncurses.h: No such file or directory原因: 未安装 ncurses 开发库
解决:
sudo apt install libncurses5-dev # Ubuntu
sudo dnf install ncurses-devel # Fedora
make: command not found原因: 未安装 Make 工具
解决:
sudo apt install make # Ubuntu
sudo dnf install make # Fedora
| 库 | 特点 | 适用场景 |
|---|---|---|
| ncurses | 功能强大,跨平台 | 复杂终端应用 |
| termbox | 轻量级,简单 | 简单终端 UI |
| 原生转义序列 | 无需库,直接控制 | 简单动画、颜色 |
本项目选择 ncurses,因为:
gcc --version)make --version)pkg-config --libs ncurses)make)make run)尝试修改 Makefile 中的优化级别(-O2 改为 -O0),重新编译,观察有什么不同
运行 gcc --help,查找 -g 选项的作用(提示:调试信息)
查看系统中的 ncurses 头文件位置:
find /usr/include -name "ncurses.h"
下一课:项目结构