基本格式

1
2
3
目标...:依赖...
命令
...

注意为Tab,不得出现空格

变量

系统变量

$(变量名)

自定义变量

  • = 延迟变量(不调用不改变)
  • := 立即赋值
  • ?= 空赋值
  • += 追加赋值

自动化变量

  • $< 第一个依赖文件
  • $^ 全部的依赖文件,若目标中有重复文件将只保留一份
  • $@ 目标的集合
  • $% 当目标为函数库的时候表示规则中的目标成员名。若目标不是函数库文件则值为空
  • $? 所有比目标新的依赖目标集合,以空格隔开
  • $* 表示目标模式中”%”及其以前的部分
  • $+ $^类似但不主动除去

伪目标

仅执行命令的目标与目录下存在的文件名冲突时,例如clean
声明方式:

1
.PHONY:clean

模式规则

% 长度任意的非空字符串,当”%”出现在目标时,目标中的”%”决定依赖中的”%”值

条件分支

1
2
3
4
5
6
ifeq (var1,var2)
...
else
...
endif

1
2
3
4
5
6
ifneq (var1,var2)
...
else
...
endif

函数

模式替换函数patsubst

$(patsubst %.c,%.o,x.c.c bar.c) 将“x.c.c bar.c”中以“.c”结尾的单词替换成“.o”

取文件名函数notdir

$(notdir src/foo.c hacks)取出路径中非目录的部分

wildcard 获取匹配模式文件名函数

$(wildcard *.c)返回当前目录下所有“.c”源文件列表

foreach循环函数

$(foreach VAR,LIST,TEXT)LIST中以空格间隔的单词逐个赋值给VAR进行TEXT中的运算

# 头文件依赖 # 文件描述符和打开模式
1
2
3
4
5
6
int fd;
fd = open(filename,flags,mode);
lseek(fd,offset,whence);
write(fd,buf,write_len);
read(fd,buf,read_len);
close(fd);
## 文件描述符 特殊的索引

文件打开模式

主模式

  • O_RDONLY:只读模式
  • O_WRONLY:只写模式
  • O_RDWR:读写模式
    副模式
  • O_CREATE:文件不存在时创建文件
  • O_APPEND:追加模式
  • O_DIRECT:直接IO模式
  • O_SYNC:同步模式
  • O_NOBLOCK:非阻塞模式

系统IO编程

  • open
  • write
  • read
  • lseek
  • close

标准IO编程