温馨提示×

ubuntu gcc怎么写Makefile

小樊
56
2026-09-16 05:33:48
栏目: 智能运维

在 Ubuntu 下用 gcc 写 Makefile,核心就是告诉 make:
目标文件怎么由源文件生成、依赖什么、用什么命令。

下面从最简单到稍规范一点,逐步给你示例。


一、最基础的 Makefile(单文件)

假设有:

hello.c

1. 最简单版本

hello: hello.c
	gcc hello.c -o hello

⚠️ 注意:gcc 前面必须是 Tab 键,不能是空格

使用:

make
./hello

清理:

clean:
	rm -f hello

二、多个源文件(推荐写法)

假设:

main.c
func.c
func.h

2. 多文件 Makefile

CC = gcc
CFLAGS = -Wall -O2

app: main.o func.o
	$(CC) main.o func.o -o app

main.o: main.c func.h
	$(CC) $(CFLAGS) -c main.c

func.o: func.c func.h
	$(CC) $(CFLAGS) -c func.c

clean:
	rm -f *.o app

使用:

make
./app
make clean

三、自动推导(更简洁)

gcc + make 支持自动规则:

CC = gcc
CFLAGS = -Wall -O2

app: main.o func.o

clean:
	rm -f *.o app
  • main.o 会自动由 main.c 生成
  • 不用手写 .o 规则

四、常见变量说明

变量 含义
CC 编译器
CFLAGS 编译参数
LDFLAGS 链接参数
$@ 目标名
$< 第一个依赖
$^ 所有依赖

示例:

app: main.o func.o
	$(CC) $^ -o $@

五、调试 / 警告 / 优化

CFLAGS = -Wall -g -O2
  • -Wall:显示警告
  • -g:调试信息
  • -O2:优化

六、完整示例(可直接用)

CC = gcc
CFLAGS = -Wall -g

TARGET = app
OBJS = main.o func.o

$(TARGET): $(OBJS)
	$(CC) $(OBJS) -o $(TARGET)

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

如果你愿意,可以告诉我:

  • 是 C 还是 C++
  • 是否用 多目录 / 静态库 / 动态库
  • 是否在 Ubuntu 22.04 / 24.04

我可以直接帮你写一份“能用的 Makefile”。

0 踩