使用makefile入门使用方法,一个规则,两个函数,三个自动变量

Makefile入门

  • makefile命名: makefile 或者 Makefile

  • 1个规则

    • 目标:依赖条件

      • (一个tab缩进)命令

      • 目标的时间必须晚于依赖条件的时间,否则就会更新目标

      • 依赖条件如果不存在,找寻新的规则去产生依赖

      • makefile会默认把第一条指令当做最终目标

      • 可以使用ALL:a.out,来指定最终的生成目标

  • 2个函数

    • 函数:wildcard
      • src = $(wildcard *.c) == ( src = add.c div1.c hello.c sub.c)
      • 匹配当前工作目录下所有的.c文件,将文件名组成列表,赋值给变量src
    • 函数:patsubst
      • 将参数3中,包含参数1的部分,替换成参数2
      • obj = $(patsubst %.c, %.o, $(src))
      • obj = add.o sub.o div1.o
      • clean:
        • rm -rf ${obj}
        • 使用 make clean -n 这里使用-n可以模拟一下看看哪些要删的
  • 3个自动变量

    • $@: 在规则命令中表示规则中的目标

    • $^: 在规则的命令中,表示所有的依赖条件

    • $<:在规则的命令中,表示第一个依赖条件,如果该变量应用在模式规则中,它可以依赖条件列表中依赖依次去除,套用模式规则。

      src = $(wildcard *.c)  #add.c sub.c div1.c hello.c
      
      obj = $(patsubst %.c, %.o, $(src)) # add.o sub.o div1.o hello.o
      
      ALL:a.out
      
      a.out:$(obj)
      	gcc $^ -o $@
      
      hello.o:hello.c
      	gcc -c $< -o $@
      
      add.o:add.c
      	gcc -c $< -o $@
      
      sub.o:sub.c
      	gcc -c $< -o $@
      
      div1.o:div1.c
      	gcc -c $< -o $@
      
      clean: 
      	-rm -rf $(obj) a.out
      
  • 模式规则:

    • %.o:%c可以替换下面所有

      %.o:%.c
      	gcc -c $< -o %@
      
      hello.o:hello.c
      	gcc -c $< -o $@
      
      add.o:add.c
      	gcc -c $< -o $@
      
      sub.o:sub.c
      	gcc -c $< -o $@
      
      div1.o:div1.c
      	gcc -c $< -o $@
      
  • 静态模式规则:

    • $(obj):%o:%c
      • gcc -c $< -o %@
  • 伪目标

    • .PHONY: clean ALL
  • 可以加警告和调试

    • myargs = -Wall -g

      gcc -c $< -o $@ $(myargs)

原文地址:https://www.cnblogs.com/fandx/p/12518191.html