Makefile经典教程提纲与收藏
来源:互联网 发布:淘宝爱奇艺会员没了 编辑:程序博客网 时间:2024/06/06 18:22
学习makefile的意义就是,对于基于linux下的相关命令可无需手动敲,引入变量达到通用化操作目的.类似于windows下的.bat文件.
供个人收藏的一个Makefile的示例:
前提解释:
$ <表示源文件,$ @表示目标文件。
最基本语法:<g++ 或者gcc语法 与makefile无关> 所以不要弄杂混了,学习的过程中.g++链接编译请参照http://blog.csdn.net/zhu2695/article/details/51340808
g++ -c 源文件.cpp
g++ 源文件.o –o 目标执行文件.
等同于:g++源文件 –o目标文件
.SUFFIXES:.c.o
CC=g++
SRCS=hello.c
OBJS=$(SRCS:.c=.o)
EXEC=hello
start:$(OBJS)
$(CC) -o $(EXEC) $(OBJS) #注释 :这句话等同于 $(CC) $(OBJS) -o $(EXEC)
@echo 'MakeFile Conplate'
.c.o:
$(CC) -o $@ -c $<
clean:
rm -f $(OBJS)
cleanexe:
rm -f $(EXEC)
1. ,标记:<依赖项可选>
<tab键:必须要这个键为开头>命令.
2. 这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,有点像C语言中的lable一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显得指出这个lable的名字。(应用:定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份,等等。)
3.依赖项关于文件会事先判断时候存在,然后再决定命令生成关系。
清空文件的稳健方法:
第一种:clean:
rm edit $(objects)
第二种:.PHONY: clean《优先选取这种》
clean :
-rmedit $(objects)
4. 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。
在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标。make所完成的也就是这个目标。
5.在规则中使用通配符
"~"
波浪号(“~”)字符在文件名中也有比较特殊的用途。如果是“~/test”,这就表示当前用户的$HOME目录下的test目录。而“~hchen/test”则表示用户hchen的宿主目录下的test目录。(这些都是Unix下的小知识了,make也支持)而在Windows或是MS-DOS下,用户没有宿主目录,那么波浪号所指的目录则根据环境变量“HOME”而定。
"*"
通配符代替了你一系列的文件,如“*.c”表示所以后缀为c的文件。一个需要我们注意的是,如果我们的文件名中有通配符,如:“*”,那么可以用转义字符“\”,如“\*”来表示真实的“*”字符,而不是任意长度的字符串。
6. 在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。
7.三、变量高级用法
这里介绍两种变量的高级使用方法,第一种是变量值的替换。
我们可以替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串。这里的“结尾”意思是“空格”或是“结束符”。
还是看一个示例吧:
foo := a.o b.o c.o
bar := $(foo:.o=.c)
这个示例中,我们先定义了一个“$(foo)”变量,而第二行的意思是把“$(foo)”中所有以“.o”字串“结尾”全部替换成“.c”,所以我们的“$(bar)”的值就是“a.c b.c c.c”。
另外一种变量替换的技术是以“静态模式”(参见前面章节)定义的,如:
foo := a.o b.o c.o
bar := $(foo:%.o=%.c)
这依赖于被替换字串中的有相同的模式,模式中必须包含一个“%”字符,这个例子同样让$(bar)变量的值为“a.c b.c c.c”。
前面说过,.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。不成文的规矩是——“clean从来都是放在文件的最后”。
原文转载自:http://blog.csdn.net/ruglcc/article/details/7814546/
- Makefile经典教程提纲与收藏
- Makefile的经典教程
- Makefile 经典教程
- Makefile经典教程
- Makefile经典教程
- Makefile 经典教程
- Makefile经典教程
- Makefile经典教程
- Makefile经典教程
- MakeFile经典教程
- makefile经典教程
- Makefile经典教程
- Makefile经典教程
- makefile经典教程
- Makefile经典rumen教程
- Makefile经典教程
- Makefile经典教程
- Makefile经典教程
- 正确学习Linux系统的5个建议
- Java设计模式之单例模式
- Python练习—画图软件生成的图像转成txt文件(只有0和1)
- C#学习之Task 的用法2
- 压缩数据
- Makefile经典教程提纲与收藏
- Android反射查询系统属性
- 获取jdk所在系统相关属性
- JavaScript对象篇
- 【Java基础知识】并发
- 解决:安装Android Studio 2.0后无法查看源码
- 同一台机器上安装多个版本的JDK,并自由切换
- 装饰器模式
- HTML meta viewport属性说明(mark)