22 · 项目工程结构

2026.09.27 · 🟡 中

一个 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语言-两天复习计划