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
posted @ 2022-03-04 10:54  InsiApple  阅读(14)  评论(0编辑  收藏  举报