Makefile的学习

1、 Makefile的定义

  •    ?=若变量未定义,则定义;+=在变量后面追加;:=和=均为赋值符号(其中,=是最基本的赋值,会将Makefile全部展开后决定对应的值,而:=表示变量的值取决于当前在Makefile里面的位置)。
  •  Makefile里面的一些控制语句记得敲空格,想调用shell脚步赋值,可以这样写PWD := $(shell pwd).

          总结:Makefile和sheel脚步有很多类似之处。

2、 Makefile的规则

    make命令执行时,需要一个Makefile文件,以用来告诉make命令需要怎么样去编译和链接,规则是:

  •    如果这个工程没有编译过,那么所有的c文件都要编译并链接。
  •    如果这个工程的c文件被修改过,那么我们只编译被修改过的c文件,并链接目标程序。
  •    如果这个工程的头文件被改变了,那么我们只需要编译引用这个头文件的c文件,并编译链接。(具体怎么知道头文件修改了,需要在编译时把头文件列出来)

3、 Makefile的通配符

   wildcard扩展通配符:SOURCE += $(wildcard *.c)获取工作目录下的所有.c55kLTgjDv文件。

   patsubst替换通配符:OBJECTS = $(patsubst %.c,%.o,&(SOURCE)或者OBJECTS = $(SOURCE:%.c=%.o)

   通配符通常发生在以下时刻:

  •    在规则的目标、依赖中的通配符,make在读取Makefile时自动为其进行匹配处理(即展开),规则是由make去管理的。
  •    在规则的命令中的通配符不需要make来操心,它们总是由shell来展开。
  •     除了上面两点之外的其他地方(如变量定义),不能直接使用统配符,只能通过wildcard来达到目的,得到以后就可以用静态模式了。

 4、 Makefile的静态模式

     其中%.c到%.o是通配符转换,其中在实际编码时target可以是不需要的。

原文地址:https://www.cnblogs.com/hzcya1995/p/13309074.html