Makefile
定义
规定文件编译顺序,类似于脚本
规则
目标···;依赖···
命令(shell)
···
(可以存在多条规则)
例子
app:add.o min.o
gcc add.o min.o -o app
add.o:add.c
gcc -c add.c
min.o:min.c
gcc -c min.c
编程优化
app:add.o min.o
$(CC) $^ -o $@
src = add.o nin.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)
%.o:%.c
gcc -c &< -o &@
函数
查找
src = $(wildcard ./*.c)
替换
objs = $(patssubst %.c %.o $(src)) #.c变.o
清理
#.PHONY:clean #伪目标不生成文件
clean:
rm $(objs) -f # make clean 运行
简单项目
include a.mk
#多级查找
srcs := $(shell find src -name "*.cpp")
# 改后缀
objs := $(srcs:.cpp=.o)
debug :
@echo objs is [$(objs)]
objs := $(objs:src/%=objs/%)
objs/%.o : src/%.cpp
@echo 编译 $< 生成 $@ 目录 $(dir $@)
@mkdir -p $(dir $@)
g++ -c $< -o $@
workspace/pro : $(objs)
@echo 依赖项 [$^]
@echo 连接 $@
g++ $^ -o $@
pro : workspace/pro
echo 编译完成
run : pro
@cd workspace && ./pro
clean :
@rm -rf workspace/pro objs
.PHONY : pro run debug clean
a.mk
cmd g++ -MM a.cpp -MF a.mk -MT prefix/a.o
prefix/a.o: a.cpp a.hpp
本文来自博客园,作者:InsiApple,转载请注明原文链接:https://www.cnblogs.com/InsiApple/p/15956534.html