1.第一个版本,易懂,
app:main.c add.c sub.c mul.c
g++ -o main.c add.c sub.c mul.c app
其中:
app:目标
main.c add.c sub.c mul.c:依赖
g++ -o main.c add.c sub.c mul.c:执行
2.第二个版本,将编译与链接分开,在有很多代码时,不需要每次编译所有的代码,通过下面的结构,每次就只编译修改的代码,然后重新链接,
app:main.o add.o sub.o mul.o
g++ -c main.o add.o sub.o mul.o app
main.o:main.c
g++ -c main.c
add.o:add.c
g++ -c add.c
sub.o:sub.c
g++ -c sub.c
mul.o:mul.c
g++ -c mul.c
3.第三个版本
obj=main.o add.o sub.o mul.o
target=app
CC=g++
CPPFLASS=-I
$(target):$(obj)
$(CC) -o $(obj) $(target)
%.o:%.c
$(CC) -c $< -o $@
其中,$<:依赖(规则中第一个依赖)
$^:规则中的所有依赖
$@:目标
%:模式匹配
4.第四个版本
src=$(wildcard .//*.c)
obj=$(patsubst ./%.c./%.o,$(src))
target=app
CC=g++
CPPFLASS=-I
$(target):$(obj)
$(CC) -o $(obj) $(target)
%.o:%.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
-mkdir /use(加-当行代码执行失败后,继续执行后面的代码)
rm $(obj) $(target) -f
.PHONY:clean 声明伪目标,当目录下有clean文件时,就需要声明伪目标
patsubst:匹配替换函数