makefile简单的笔记
初步:
main:main.o func.o gcc mian.o func.o -o main #生成main函数 main.o:mian.c gcc -c main.c -o main.o #生成main.o func.o:func.c gcc -c func.c -o func.o #生成func.o .PHONY:rebuild clean #.PHONY习惯作伪目标的标记 rebuild:clean main #重新生成项目的伪目标 clean: #清除文件的为目标 rm -f main.o func.o main
使用变量改进:
exe:=main #定义变量:目标exe:main.c objs:=main.o func.o #定义变量:obj文件 $(exe):$(objs) gcc $^ -o $@ #生成main函数 %.o:%.c gcc -c $^ -o $@ #生成main.o和func.o .PHONY:rebuild clean #.PHONY习惯作伪目标的标记 rebuild:clean main #重新生成项目的伪目标 clean: #清除文件的为目标 rm -f $(objs) $(exe)
使用makefile内的函数改进:
exe:=main #定义变量:目标exe:main.c srcs:=$(wildcard *.c) #使用wildcard函数,匹配正则表达式内的变量 objs:=$(patsubst %.c,%.o,$(srcs))#定义变量:各个obj文件;patsubst(pattern,replaced,str)函数可以按正则表达式替 $(exe):$(objs) gcc $^ -o $@ #生成main函数 %.o:%.c gcc -c $^ -o $@ #生成main.o和func.o .PHONY:rebuild clean #.PHONY习惯作伪目标的标记 rebuild:clean main #重新生成项目的伪目标 clean: #清除文件的为目标 rm -f $(objs) $(exe)
makefile的for循环,生成目录.c对应的程序:
srcs:=$(wildcard *.c) #定义源代码的列表 2 exe:=$(patsubst %.c,%,$(srcs)) #从源代码列表截掉.c,生成exe的文件名 3 make_all:$(exe) #伪目标,目的是生成列表对应的程序 4 for i in $(exe);do gcc $$i.c -o $$i;done #$$i相当于exe 5 .PHONY:clean rebuild 6 rebuild:clean make_all 7 clean: 8 rm -f $(exe)
浙公网安备 33010602011771号