22 · 项目工程结构
一个 C 项目长什么样
myproject/
├── include/ # 头文件(对外接口)
│ └── student.h
├── src/ # 源文件(实现)
│ ├── main.c
│ └── student.c
├── build/ # 编译产物(.o / .exe)
├── Makefile # 构建脚本
└── README.md
分工原则
| 文件 | 放什么 |
|---|---|
.h 头文件 |
函数声明、宏、结构体、typedef、extern(接口) |
.c 源文件 |
函数定义、具体实现(实现) |
main.c |
只负责程序入口和流程编排 |
原则:接口与实现分离。别人只看
.h就知道怎么用你的模块,不用看.c。
编译与链接
# 一步到位
gcc main.c student.c -o app -I./include
# 分步(大项目常用)
gcc -c src/student.c -Iinclude -o build/student.o # 编译成目标文件
gcc -c src/main.c -Iinclude -o build/main.o
gcc build/*.o -o app # 链接
Makefile 入门
CC = gcc
CFLAGS = -Wall -Wextra -Iinclude
TARGET = app
SRCS = src/main.c src/student.c
OBJS = $(SRCS:.c=.o)
$(TARGET): $(OBJS)
$(CC) $(OBJS) -o $(TARGET)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
.PHONY: clean
make # 编译
make clean # 清理
关联
16-预处理器与头文件 · 15-文件读写 · C语言-两天复习计划