makfle的基本概念

文章目录

    • 1 makefile的规则
    • 2 通配符
    • 3 假想目标.PHONY
    • 4 变量
      • 4.1 简单变量(即时变量)
      • 4.2 延时变量

1 makefile的规则

makefile的核心即规则,规则的形式如下:

目标 : 依赖1 依赖2 …
[TAB] 命令

执行命令的条件:

  1. 目标文件不存在。
  2. 某个依赖比目标文件新(对比时间戳,linux下可以使用touch命令改变已存在文件的时间戳)。

2 通配符

常用的通配符如下:

  • %.o :表示所有的.o文件
  • %.c:表示所有的.c文件
  • $@:表示目标
  • $< :表示第一个依赖文件
  • $^ : 表示所有的依赖文件

下面为一个简单的makefile的示例:

test: a.o b.o 
	gcc -o test $^
	
%.o : %.c
	gcc -c -o $@ $<

3 假想目标.PHONY

当我们把一个目标定义为假想目标时,执行目标是就不会判断当前目标名对应的文件是否存在,而是无条件执行(在有无依赖的情况下都是一样的)。

定义的格式如下:
.PHONY: clean


4 变量

4.1 简单变量(即时变量)

A := XXX:变量A的值即刻确定,即在定义的时候就已经确定。这里即刻确定的含义是指:当把右边变量的值赋值给A时,此时变量A的值等当前右边变量的值(之后右边变量的值发生改变也不会对当前变量的值产生影响)。

4.2 延时变量

B = XXX:把右边的变量的值赋值给B时,B当前的值在定义时并没有确定。当make命令执行时,会把整个makefile的值读进来,最终确定右边变量的值,然后B的值就等于最终右边变量的值。

常用的变量定义如下:

  • := :即时变量
  • = :延时变量
  • ?=:延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
  • +=:附加, 它是即时变量还是延时变量取决于前面的定义

你可能感兴趣的:(Linux)