make学习笔记

makefile入门
1.学习makefile
2.通配符
3.伪目标
4.多目标
5.makefile特征:
6.变量
7.makefile常用的字符串函数调用
8.文件名操作函数
9.隐式规则
10.模式规则
1.学习makefile
make---->自动确定工程的那部分源程序文件需要重新编译,编译多个源文件;

用法:make [options] [target] …
-f filename -C -e -k -s -S
makefile----自动化编译

实例1:
all:main.c foo.c foo1.c foo2.c //all生成二进制的目标文件,后面为其依赖的文件,如果main.c foo.c foo1.c…中任何一个文件的修改日期比all文件日期新,或者all不存在,那么依赖关系发生;
gcc main.c foo1.c foo2.c foo.c -o all #生成目标all(可执行文件)的方法或命令;

实例2:
如果工程中某几个C文件被修改,只需编译被修改的C文件;
如果头文件被改变,则需要引用几个头文件的C文件,并连接目标程序;
all:作为最终执行目标;
all:main.o kbd.o util.o
gcc -o all main.o kbd.o utils.o
main.o:main.c defs.h
gcc -c main.c
kbd.o:kbd.c def.h
gcc -c kbd.c

clean: #clean伪目标
rm all main.o kbd.o…utils.o
#clean作用删除make中生成过程文件

语法规则:
target : prerequistes #all为目标文件名,prerequistes为依赖的文件,command命令行(bash命令)
command
或者是
targets:prerequisites; command #command如果与prerequisites在一行,可以用分号分隔;
command #command支持正则表达式;1

2.通配符
通配符也可以在目标文件中使用
print:.c #生成的目标文件为print,其依赖所有的.c文件
lpr -p KaTeX parse error: Expected 'EOF', got '#' at position 4: ? #̲?是一个自动化变量,表示所有比目标新的依赖文件的集合
touch print
1

通配符也可以使用在变量中: objects=.o #不会展开,其变量值就是.o
如果让其展开即所有的.o文件名的集合,需这样写: objects:=$(wildcard *.o) #其中wildcard是makefile的关键字;
3.伪目标
伪目标并不是一个文件,而只是一个标签;为防止与文件名重名的这种情况,可以是使用一个特殊标记".PHONY"来显示的指明一个目标是伪目标,向make说明不管有没有这个文件,这个目标都是伪目标;
执行时 make clean;

.PHONY:clean
clean:
rm all main.o kbd.o…
1

伪目标也可以作为默认目标,只要将它放在第一个;一口气生成多个目标;伪目标总会被执行的;

all:prog1 prog2 #makefile中的第一个目标会被作为其默认目标;
.PHONY:all
prog1: prog1.o utils.o
cc -o prog1 util.s
prog2: prog2.o
cc -o prog2 prog2.o #all总会比其三个目标新,在进行make重新编译时,其他三个目标规则就会宗被决议

4.多目标
多个目标同时依赖于同一个文件;
使用一个自动化变量“$@”,意味着目前规则中所有的目标的集合;

bigoutput littleoutput: text.g
generate text.g - ( s u b s t o u t p u t , , (subst output,, (substoutput,,@)>;KaTeX parse error: Expected 'EOF', got '#' at position 3: @ #̲等价于: bigoutput:…(subst output, @ ) 中 的 @)中的 @)表示指向一个makefile的函数,函数名为subst,后面为参数,subst函数时截取字符串的以上,$@表示目标的集合; $@依次取出目标,并指向命令;
1
8
5.makefile特征:
make会按照顺序一条一条的执行命令,所有命令以tab开头,除非紧跟依赖规则后面;
----->如果要让上一条的命令结果应用在下一条命令,需要使用分号分割这两条命令

exec:
- cd /home
pwd #输出makefile所在目录,即./
exec:
cd /home;pwd #输出/home

每当命令执行完毕后,make会自动检测它们的返回码;
命令前加"-",标记为不管命令是否出错都认为是成功的。
6.变量
在使用变量时应加入" “ 符 号 , 最 后 使 用 ( ) 或 把 遍 历 包 括 起 来 ; 如 果 使 用 真 实 的 ” “符号,最后使用()或{}把遍历包括起来;如果使用真实的” 使()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值