Makefile
**
简单写makefile
main:main.o main.h 1.o 1.h gcc main.o 1.o -o main main.o: main.c main.h gcc main.c -o main.o -c 1.o:1.c 1.h gcc 1.c -o 1.o -c
解释:
以上例子中:
第一执行make:最终目标是main,main目标文件不存在,需要根据后面的依赖文件和规
则生成main但是main.o及1.o这些依赖不存在,ok,make会去往下找生成main.o和1.o的
生成规则。 先找到main.o,main.o生成依赖main.c和main.h,这两个存在,根据下面的规则
编译生成main.o,还差1.o,继续往下找,同上理生成1.o。这些main目标的依赖文件都有了,
最后使用第一条规则生成main可执行程序。
第二次及后续执行make:查看第一个目标,对比所有目标文件和依赖文件,如果有任何一
个依赖文件的修改时间比目标文件的修改时间新,则执行其对应规则。过程如上,最终完成
更新后最终目标文件的生成。make的这一规则减少了对已编译未更新文件的时间花费。提
高了编译链接速度。
-------------简易版万能Makefile-------------
CFLAG:= -I./inc #编译参数 可以指定头文件的外在加载路径 #inc是存放头文件得到文件夹 TARGET:= project source:= $(wildcard ./src/*.c) #先获取src下面的所有.c文件字符串 放在source中 source+= $(wildcard ./apd/*.c) #再追加添加apd下所有.c文件 Source1:= $(patsubst %.c,%.o,$(source)) #把.c文件按照%c格式替换为%.o格式的.o文件放在objs变量中 $(TARGET):$(Source1) #把所有.o文件链接生成可执行文件project gcc $^ -o $@ $(CFLAG) %.o:%.c #把所有的.c文件编译生成.o文件 gcc -c $^ -o $@ -g $(CFLAG) .PHONY: clean #声明后面clean为伪目标 clean: rm $(Source1) $(TARGET) pri: @-echo $(Source1)
wildcard函数:
使makefile中的变量能识别通配符,否则通配符只能在规则命令那里使用
$(wildcard 参数)
函数功能:能够识别参数的通配符 并转换为字符串
例程:
模板:-----> 加载当前目录下的C文件,也可以加载其他目录下的C文件
SOURCES := $(wildcard ./.c)
SOURCES += $(wildcard ./src/.c)
OBJS := ( p a t s u b s t (patsubst %.c,%.o,(patsubst(SOURCES)) #得到对应欲编译生成的*.o目标文件列表