当前位置:   article > 正文

make--(3)makefile_makefile 去除后缀

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

环境变量宏

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

test:
   echo %%include%%
  • 1
  • 2

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

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

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

test:
   set TEST="are you ok???"
   echo %%TEST%%
   echo $(TEST)
  • 1
  • 2
  • 3
  • 4

特殊字符

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

test:
   echo ^#
   echo ^(
   echo ^@
   echo ^%path^%   # ------error
  • 1
  • 2
  • 3
  • 4
  • 5

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

命令

@ : 执行时隐藏命令,如@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  $@ $**
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

.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    #自定义规则必须加上
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

批量规则

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

路径的使用

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/965561
推荐阅读
相关标签
  

闽ICP备14008679号