在 Ubuntu 下使用 gcc 进行多文件编译,常见有以下几种方式。下面用示例一步步说明。
假设有如下三个文件:
.
├── main.c
├── func.c
└── func.h
#ifndef FUNC_H
#define FUNC_H
void hello();
#endif
#include <stdio.h>
#include "func.h"
void hello() {
printf("Hello from func.c\n");
}
#include "func.h"
int main() {
hello();
return 0;
}
gcc main.c func.c -o app
运行:
./app
✅ 适合文件较少的情况
.o)gcc -c main.c -o main.o
gcc -c func.c -o func.o
gcc main.o func.o -o app
运行:
./app
✅ 修改某个文件时只需重新编译该文件
创建 Makefile:
CC = gcc
TARGET = app
OBJS = main.o func.o
$(TARGET): $(OBJS)
$(CC) $(OBJS) -o $(TARGET)
%.o: %.c
$(CC) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
使用:
make
./app
make clean
✅ 适合中大型项目
// main.c
#include "func.h" // 必须
.c 文件中gcc main.c func.c -I./include -o app
| 方式 | 命令示例 | 适用场景 |
|---|---|---|
| 直接编译 | gcc a.c b.c -o app |
小项目 |
| 目标文件 | gcc -c + gcc *.o |
常用 |
| Makefile | make |
工程化 |
如果你有 具体项目结构 或 编译报错信息,可以贴出来,我可以直接帮你改。