01

xiaoxiao2021-02-28  85

Makefile文件 格式: #目标:依赖(即条件) # 命令 /*注意一:我们通常在make时候,直接就是执行第一条目标,但是可以指定执行的目标。例如:make clean , make app等*/ /*阶段一: 注释:这是最粗略的版本*/ #app:add.c sub.c dive.c mul.c main.c # gcc add.c sub.c dive.c mul.c main.c -o app /*阶段二: 注释:改进,有时候我们在make时不想要更新已存在的文件,只想要更新改动过的文件,根据第一阶段的makefile文件,我们的所有依赖项都会重新编译,这很浪费时间。但是通过下面阶段二的写法,分别编译依赖项,可以只更新我们更改过的文件,提高效率。*/ #app:add.o sub.o dive.o mul.o main.o # gcc add.o sub.o dive.o mul.o main.o -o app #add.o:add.c # gcc -c add.c #sub.o:sub.c # gcc -c sub.c #dive.o:dive.c # gcc -c dive.c #mul.o:mul.c # gcc -c mul.c #main.o:main.c # gcc -c main.c /*阶段三: 注释:makefile也有很多的环境变量,使用这些环境变量,可以使我们更加专业化。*/ # $@表示目标,$^表示所有依赖,$<表示依赖中的第一个 #obj=add.o sub.o mul.o dive.o main.o #src = $(wildcard *.c) //获取当前目录下所有.c文件名 #obj = $(patsubst %.c,%.o,$(src))//将.c文件名换成.o文件名 #target = app #$(target):$(obj) # gcc $^ -o $@ #%.o:%.c # gcc -c $< -o $@ /*伪目标:避免和同名文件冲突,改善性能。*/ #阶段四 CPPFLAGS= -Iinclude CFLAGS= -g -Wall LDFLAGS= CC=gcc #CC=arm-linux-gcc src = $(wildcard *.c) obj = $(patsubst %.c,%.o,$(src)) /*obj=$(src:.c=.o)等同*/ target = app $(target):$(obj) $(CC) $^ $(LDFLAGS) -o $@ %.o:%.c /*.c.o:等同*/ $(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@ .PHONY:clean #彻底清除生生过程文件 clean: -rm -f *.o -rm -f app #彻底清除生生过程文件和生成配置文件 distclean: rm /usr/bin/app install: cp app /usr/bin test: @echo $(src) /*取消回显*/ @echo $(obj)
转载请注明原文地址: https://www.6miu.com/read-69001.html

最新回复(0)