一、Makefile
1、如果这个程序没有 编译过,那么我们的所有的C文件都要编译并、
被链接
2、如果工程中的某个C文件被修改,那么我们只编译被修改的C
文件,并连接目标程序。
3、如果这个工程的头文件被改变,那么我们需要编译引起了这几个头文件
的C文件,并链接目标程序。
二、Makefile 规则:
target .........prerequisties......./
command
.........
.........
clean
/是换行的意思! 内容保存在Makefile或makefile中、然后,
在目录下直接输入
Tab键开头:
Malefile中可以定义:不用的编译或是和编译无关的命令,比如
程序的打包,程序的备份,等等。。。
三、make是如何工作的
四、Makefile中使用变量
定义: objects=
使用: $(objects)
五、让make自动推导
.PHONY:clean
clean:
六、另类风格的Makefile
七、清空目标文件的规则
.PHONY:clean
clean:
-rm
-:也许某些文件出现问题,但不要管,继续做后面的事,
当然,clean的规则不要放在文件的开头,
、、、Makefile中的注释用:# 转义:/#
一、Makefile的文件名:
如果使用别名:make -f 或 -file 如:make -f/-file Make.AIX
二、引用其他的Makefile
include的语法是:
include<filename>
-include<filename>其表示,无论include过程中出现什么、
四、环境变量 MAKEFILES
五、make的工作方式
1.在规则中使用通配符“*”。“?” “ [.....]”“~”
2.文件搜寻
VPATH=
1.vpath <pattern><directories>
为符合模式《pattern》的文件指定搜索目录<dirextories>
2.vpath<pattern>
清除符合模式<pattern>的文件的搜索目录
3. vpath
清除所有已被设置好的文件搜索目录
《pattern》包含“%”%的意思是匹配零或若干字符 %。
《directories》指搜索路径
六、伪目标
clean
.PHONY:clean
clean
rm *.o temp
七、多目标
八、静态模式
<targets ....>: <target-pattern>:<prereq-patterns....>
<commands>
..................
targets 定义了一系列的目标文件,可以说是通配符。是目标的集合
target 是指明targets的模式,也就是目标集合模式。
prereq-parrterns是目标的依赖式,他对target-parrtern
形成的模式在进行一次依赖目标的定义。
例如:
<target-pattern> 定义:%.o
prereq-patterns....> 定义为:%.c
意思是对:<target-pattern>所形成的目标集进行二次定义
使<target-pattern> 去掉[.o]这个结尾 加上[.c]结尾
$< $@ 是自动化变量,
$< 表示所有的依赖目标集
$@ 表示目标集
objects=foo.o bar.o
all:$(objects)
$(objects) : %.o : %.c
$(cc) -c $(CFLAGS) $< -O $@
九、自动生成依赖性
-M 自动找寻源文件中包含的头文件,并生成一个
依赖关系。
cc -M main.c
GUN 中用:
-MM
依赖关系方在 .d 的文件中
一 显示命令:、
"@"字符在命令行前,这个命令将不被make显示;
make -n或“--just-print”只是显示命令 不执行
make参数 “-s”或“-slient”则是全面禁止命令的显示
二、执行命令
注: 若果你要让一条命令的结果应用在下一条命令时,
你应该使用分号 把两条命令分割开,
三、命令出错
1、我们在Makefile的命令行前加一个“-”(在tab键后)
标记为不管命令出不出错都认为是成功的。
2、全局办法 是在make时 加上 “-i”
3、make -k如果规则中的命令出错 那么就终止该规则的执行,
但继续执行器它规则
四、嵌套执行make
如果你要传递变量到下集Makefile中,
export<variable>
如果某些变量不要传递变量到下集Makefile中,
unexport<variable>
五、定义打包
1.变量的基础
使用时在变量前加上$
2.变量中的变量
1.=左侧是变量 右侧是值(此值可以在任何地方定义)
2:= 前面的变量不能使用后面的变量