1、编译 .c 生成 .o 高级语言生成可识别的机器指令,不能被执行
链接 将.o文件和库文件链接成可执行文件
库文件包括静态库和动态库。
静态库是多个.o文件的集合,链接时被加载,使用ar工具维护;
动态库也是多个.o文件的集合,又叫共享库,运行时被加载,多个进程共享其代码段,不共享数据段。
2、gcc -c :生成.o文件
3、使用 \ 来分行
4、makefile的处理规则
a/目标.o不存在,使用描述规则创建
b/目标.o的依赖.c比它新,使用描述规则重新创建
c/目标.o的依赖.c没它新,什么都不做
5、变量
声明:object=a.o b.o
使用:main:$(object)
= 递归展开式 可以展开后面定义的变量 (容易产生死循环)
:=直接展开式 不可以展开后面定义的变量 (推荐使用)
?=如果该变量未被定义则定义它,否则不执行任何操作
+=追加变量
6、隐含规则
.c生成.o的规则可以省去命令
main.o:main.c
7、伪命令
.PHONY:clean
clean:
rm .......
8、makefile第一个规则之后所有以[Tab]字符开始的行make将它交给shell处理
9、包含其他makefile
暂停读取当前makefile,先读取includemakefile
include Filenames... 文件不存在将报错
-include Filenames... 忽略文件不存在的影响
snclude Filenames... 兼容性更高
10、变量object=*.o object代表字符串*.o,而不是所有.o文件,因为它只是把字符串赋给了变量
可以使用wildcard函数来处理通配符
object=$(wildcard *.o)现在object等于所有的.o文件了
wildcard是通配符处理函数
11、条件判断语句
ifeq
ifneq
ifdef
ifndef
ifeq(var1,var2)
代码段
else
代码段
endif
12、make中当有逗号或空格作为参数时,需要把它们赋值给一个变量
13、一些文本处理函数
subset
格式:$(subset from,to,text)
字符串替换
patsubset
格式:$(patsubset pattern,replacement,text)
模式替换
14、函数
shell
call 调用自定义的函数
链接 将.o文件和库文件链接成可执行文件
库文件包括静态库和动态库。
静态库是多个.o文件的集合,链接时被加载,使用ar工具维护;
动态库也是多个.o文件的集合,又叫共享库,运行时被加载,多个进程共享其代码段,不共享数据段。
2、gcc -c :生成.o文件
3、使用 \ 来分行
4、makefile的处理规则
a/目标.o不存在,使用描述规则创建
b/目标.o的依赖.c比它新,使用描述规则重新创建
c/目标.o的依赖.c没它新,什么都不做
5、变量
声明:object=a.o b.o
使用:main:$(object)
= 递归展开式 可以展开后面定义的变量 (容易产生死循环)
:=直接展开式 不可以展开后面定义的变量 (推荐使用)
?=如果该变量未被定义则定义它,否则不执行任何操作
+=追加变量
6、隐含规则
.c生成.o的规则可以省去命令
main.o:main.c
7、伪命令
.PHONY:clean
clean:
rm .......
8、makefile第一个规则之后所有以[Tab]字符开始的行make将它交给shell处理
9、包含其他makefile
暂停读取当前makefile,先读取includemakefile
include Filenames... 文件不存在将报错
-include Filenames... 忽略文件不存在的影响
snclude Filenames... 兼容性更高
10、变量object=*.o object代表字符串*.o,而不是所有.o文件,因为它只是把字符串赋给了变量
可以使用wildcard函数来处理通配符
object=$(wildcard *.o)现在object等于所有的.o文件了
wildcard是通配符处理函数
11、条件判断语句
ifeq
ifneq
ifdef
ifndef
ifeq(var1,var2)
代码段
else
代码段
endif
12、make中当有逗号或空格作为参数时,需要把它们赋值给一个变量
13、一些文本处理函数
subset
格式:$(subset from,to,text)
字符串替换
patsubset
格式:$(patsubset pattern,replacement,text)
模式替换
14、函数
shell
call 调用自定义的函数