Makefile有简单写法和复杂写法,先上复杂写法。
SRC = main.cpp
CC = g++
test:test.o
./test.o
test.o:$(SRC)
$(CC) $(SRC) -o test.o
clean:
rm -rf *.o test.o
简单写法:
#1.使用变量改进makefile
#2.使用静态模式规则,简化makefile
#3.使用伪目标加上clean
#4.引进wildcard函数,自动扫描当前目录下的源文件
#5.加入自动规则依赖
#定义可执行文件变量
executable := complicated
#引进wildcard函数扫描源文件,定义源文件列表变量
sources := $(wildcard *.c)
#使用变量的引用替换,定义object文件列表
objects := $(sources:.c = .o)
#使用变量的引用替换,定义依赖描述文件列表
deps := $(soueces:.c = .d)
#定义编译命令变量
CC := gcc
RM := rm -rf
#终极目标规则,生成complicated可执行文件
$(executable): $(objects)
#使用自动化变量改造我们的编译命令
$(CC) -o $@ $^
#静态模式规则简化main.o complicated.o 生成规则
$(objects): %.o : %.c
$(CC) -o $@ -c %<
#使用伪目标添加clean规则
.PHONY: clean
clean:
$(RM) $(executable) $(objects) $(deps)
#自动规则依赖
include $(deps)
$(deps): %.d : %.c
$(CC) -MM $< > $@