赞
踩
继上篇,文件名宏还可以添加后缀:
后缀 | 解释 |
---|---|
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
当编译文件越来越多的时候,不可能一个一个的写对应的描述块,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文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。