Makfile学习1——示例(一步一步完善)

示例:

①基础,根据最基础的规则编写。这条规则的作用:判断这些依赖文件,如果发现某个依赖文件被修改过(make会比较依赖文件和目标文件的时间,比如比目标文件时间新,认为被修改过),就会执行命令,来重新生成目标文件。简单暴力,但是效率低

test : main.c sub.c sub.h
    gcc -o test main.c sub.c

②效率高,相似规则太多太啰嗦,不支持检测头文件

test : main.o sub.o           #当我们make时没有指定目标,就会去Makefile里查找第一个目标。
    gcc -o test main.o sub.o
main.o : main.c
    gcc -c -o main.o main.c
sub.o : sub.c
    gcc -c -o sub.o sub.c

  clean:
   rm *.o test

③使用通配符,消除重复规则,效率高,精炼,不支持检测头文件

test : main.o sub.o
    gcc -o test main.o sub.o

%.o : %.c
    gcc - c -o $@ $<

clean:
    rm *.o test -f

 ④效率高,精炼,支持检测头文件(但是需要手工添加头文件规则)

test : main.o sub.o
    gcc -o test main.o sub.o
%.o : %.c
    gcc -c -o $@ $<

sub.o : sub.h

clean:
    rm *.o test -f

⑤效率高,精炼,支持自动检测头文件

objs := main.o sub.o
test : $(objs)
    gcc -o test $^
# 需要判断是否存在依赖文件
# .main.o.d .sub.o.d
dep_files := $(foreach f, $(objs), .$(f).d)
dep_files := $(wildcard $(dep_files))
# 把依赖文件包含进来
ifneq ($(dep_files),)
    include $(dep_files)
endif
%.o : %.c
    gcc -Wp,-MD,.$@.d -c -o $@ $<
clean:
    rm *.o test -f
distclean:
    rm $(dep_files) *.o test -f

 



posted @ 2020-05-09 22:08  不明白就去明白  阅读(217)  评论(0)    收藏  举报