在 Ubuntu 下用 gcc 写 Makefile,核心就是告诉 make:
目标文件怎么由源文件生成、依赖什么、用什么命令。
下面从最简单到稍规范一点,逐步给你示例。
假设有:
hello.c
hello: hello.c
gcc hello.c -o hello
⚠️ 注意:
gcc前面必须是 Tab 键,不能是空格
使用:
make
./hello
清理:
clean:
rm -f hello
假设:
main.c
func.c
func.h
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)
如果你愿意,可以告诉我:
我可以直接帮你写一份“能用的 Makefile”。