Linux中常用Makefile隐含规则

隐含规则

make默认将.c文件编译成对应的.o目标文件
对没有命令行的规则
寻找一个隐含的规则来执行

.PHONY:clean
test1 test2:
    @echo "test:"
hello:player.o lcd.o media.o
    gcc -o $@ $^
#%.o:%.c
#   gcc -o $@ -c $^
clean:
    rm *.o hello

make 结果:

root@ubuntu:~/lesson/chap2/2-8/2-8-1# make
gcc -o hello.o -c hello.c
gcc -o hello hello.o
root@ubuntu:~/lesson/chap2/2-8/2-8-1# ls
hello  hello.c  hello.o  makefile

取消隐含规则
使用make -rmake -R参数取消隐含规则

隐含变量

命令变量
CC:编译程序,默认是cc
AS:汇编程序,默认是as
CXX:C++编译程序,默认g++
AR:函数库打包程序,默认是ar
命令参数变量
CFLAGS:执行CC编译器的命令行参数
CXXFLAGS:执行g++编译器命令行参数
ASFLAGS:执行汇编器AS命令行参数
ARFLAGS:执行AR命令行参数
更多参数:LDFLAGS、CPPFLAGS

.PHONY:all
all:
    @echo "CC=$(CC)"
    @echo "AS=$(AS)"
    @echo "CXX=$(CXX)"
    @echo "AR=$(AR)"
    @echo "CFLAGS=$(CFLAGS)"
    @echo "CXXFLAGS=$(CXXFLAGS)"
    @echo "ASFLAGS=$(ASFLAGS)"
    @echo "ARFLAGS=$(ARFLAGS)"
    @echo "LDFLAGS=$(LDFLAGS)"

make结果:

root@ubuntu:~/lesson/chap2/2-8/2-8-2# make
CC=cc
AS=as
CXX=g++
AR=ar
CFLAGS=
CXXFLAGS=
ASFLAGS=
ARFLAGS=rv
LDFLAGS=

模式规则

使用模式规则来定义一个隐式规则
模式规则,至少在规则的目标定义中包含%
%:任意长度的非空字符串,表示对文件名的匹配
在目标文件名中,%匹配的部分称为“茎”
目标和目标依赖同时含有%
依赖目标的茎会传给目标
多目标模式规则
同一个模式规则可以存在多个目标
普通多目标规则:每个目标作为一个独立规则处理;多个目标对应多个独立规则。
多目标模式规则:所有规则目标共同拥有依赖文件和规则的命令行,当文件符合多个目标模式中的任何一个时,规则定义的命令执行

.PHONY:clean
test1 test2:
    @echo "test:"
hello:player.o lcd.o media.o
    gcc -o $@ $^
%.o:%.c
    gcc -o $@ -c $^
clean:
    rm *.o hello

make 结果:

root@ubuntu:~/lesson/chap2/2-8/2-8-1# make
gcc -o hello.o -c hello.c
gcc -o hello hello.o
root@ubuntu:~/lesson/chap2/2-8/2-8-1# ls
hello  hello.c  hello.o  makefile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gkbytes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值