make--(3)makefile

文件名宏

继上篇,文件名宏还可以添加后缀:

后缀解释
R去掉扩展名
D去掉文件名和扩展名
F去掉前面的目录
B去掉前面的目录和扩展名
在当前环境下,我的命令行在G:make\路径下,所以下面的测试中$@为.\test.exe。
test.exe:test.obj
  gcc -o test.exe test.obj
  echo   $@             ----->test.exe
  echo   $(@R)          ------>test
  echo   $(@D)          ------> .
  echo   $(@F)          ------>test.exe
  echo   $(@B)          ------->test
test.obj:test.s 
  gcc -c -o  test.obj test.s
test.s:test.c
  gcc -S -o  test.s test.c

环境变量宏

使用环境变量的格式为 %%path%%,可以通过set查看当前设置的环境变量,用set xxx=" yyy"来设置一个xxx环境变量.如下输出include的环境变量

test:
   echo %%include%%

每个外部环境变量都有一个对应的宏,我们可以用这个宏来引用这个环境变量。

test:
   echo $(OS) ------结果> echo Windows_NT

需要注意的是
1:
使用环境变量宏并不能取出小写的宏的值,如$(include)等
2:
并不是全部的环境变量都有宏,用set设置的临时环境变量是没有宏的

test:
   set TEST="are you ok???"
   echo %%TEST%%
   echo $(TEST)

特殊字符

#—makefile中的注释符号-
^—用来表示: ; # ( ) ^ \ { } ! @ —等特殊符号,注意有的文章写$和%也可以,实测这两个特殊字符用^表示可以会出现错误。

test:
   echo ^#
   echo ^(
   echo ^@
   echo ^%path^%   # ------error

$—两个$来表示一个$
%—两个%来表示一个%

命令

@ : 执行时隐藏命令,如@gcc -o test.exe test.obj
-: 表示命令执行失败时不会退出nmake,如-gcc -o test.exe test.obj

makefile的规则

预定义规则

当编译文件越来越多的时候,不可能一个一个的写对应的描述块,makeflie的规则就是将一些相同类型编译的描述块合并成一个描述块。比如,将OBJ文件生成EXE文件,就是.obj.exe(目标,依赖)不管什么文件名的OBJ和EXE文件都会按照这个描述块执行 描述块写法

test.exe:test.obj
  gcc -o test.exe test.obj
test.obj:test.s 
  gcc -c -o  test.obj test.s
#test.s:test.c
#  gcc -S -o  test.s test.c
#.c.s相当于上面的注释
.c.s: 
   gcc -S -o  $@ $**

.s.c属于是make定义好的,叫预定义规则,这样的规则还有很多.c.exe,.c.obj,.cpp.exe,.cpp.obj,每个规则有默认的命令

自定义规则

由自己编写规则。如下,先创建.ccc的依赖文件,欲得到yyy文件,依赖是ttt,由自定义规则将ccc文件得到ttt文件。最后要加上.SUFFIXES:.<依赖文件>

a.yyy :a.ttt
   echo $@------------> echo  a.yyy

.ccc.ttt :
   echo $(**:.ccc=.ttt)---->echo  a.ttt
.SUFFIXES:.ccc    #自定义规则必须加上

批量规则

规则后面是单冒号还是双冒号也会影响make编译,
单冒号:多次执行
双冒号:单次执行

路径的使用

{test}.c 在test目录中搜索c文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

工农村贴膜小哥

我倒是要看看是那个憨憨在给我打

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

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

打赏作者

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

抵扣说明:

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

余额充值