学会使用makefile:1
来源:互联网 发布:谢安视觉知乎 编辑:程序博客网 时间:2024/06/10 13:27
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">假设有下面几个文件:</span>
maze.hmaze.cmain.hmain.cstack.hstack.c
最简单的编译方法当然就是 gcc maze.c stack.c main.c -o main
但是这个方法不好,当对maze.c做了一点点的修改之后就要重新编译那些没有修改的文件。当然首先想到的解决办法就是用下面这种方式
gcc -c main.cgcc -c maze.cgcc -c stack.cgcc main.o maze.o stack.o -o main但是这种方式导致了当改变一个文件之后,每次编译的命令都不一样,恒容易出错。
可以编写一个简单的makefile来解决上面这些问题:
main: main.o stack.o maze.o gcc main.o stack.o maze.o -o mainmain.o: main.c main.h maze.h stack.h gcc -c main.cmaze.o: maze.c maze.h main.h gcc -c maze.cstack.o: stack.c stack.h main.h gcc -c stack.c
然后在这个目录下执行make命令就可以了。
makefile的一般规则如下所示:
target ...: prerequisites .... command1: command2: ....目标与条件的一般关系为:想要更行目标必须要先更新其所有的条件,所有的条件指套有一个被更新了,那么目标也会被更新。
所以说makefile执行的一般步骤就是:
1.检查规则A的每个条件P: 如果存在以P为目标的规则B,那么执行规则B 如果找不到以P为目标的规则,而且P已存在,那么表示P不需要更新 上述情况如果P不存在的话就报错退出2.检查完A的所有条件后,检查目标T。如果有如下的情况之一,那么表示T需要更新,那么执行起命令列表,执行完成后无论是否生成文件T,都认为T被更新了 文件T不存在 文件T存在,但是一个是条件的文件P起修改时间晚于T的修改时间 某个条件P被更新过
每个makefile实际上也对应着一套clean规则,用于清理编译生成的二进制文件。
对应上面这个例子,可以在makefile的最后加入下面的clean规则:
clean: @echo "cleaning project" -rm main *.o @echo "clean complete"
使用clean可以通过执行make clean来实现。
这里的clean实际上也是一个目标,指定了make clean相当于也就指定了clean这个目标,那么执行clean后面的方法,如实如果不指定的话就会指定默认的目标,也就是第一行的第一条。(但是实际上不会生成clean目标,应为正如前面所说,只要执行了命令列表就算更行了目标(这里是clean),有的命令列表是不会生成目标的)
注意,上面的命令前面加上了-以及@符号
命令前面的-表示的是:即使这条命令执行出错了,那么也会继续向后执行
命令前面的@表示的是:不会显示命令本身而只是显示其产生的结果。
注意因为有clean规则,但是不需要什么文件,如果目录下存在一个clean的文件的话,那么make clean实际上不会执行任何操作,如果想要避免这种情况的发生可以使用,可以加一条特殊的规则,讲clean作为伪目标:
.PHONY: clean //这里就将clean作为是伪目标,不会去关注外面已经生成的clean文件。类似clean这样的约定俗成的名字还有:
all,执行主要的编译工作,通常作为缺省的目标
install,执行编译完成之后的安装工作
clean ,删除编译生成的二进制文件
disclean, 删除除源码之外的所有文件
0 0
- 学会使用makefile:1
- 学会使用makefile:2
- 学会使用makefile:3
- 学会使用makefile:4
- 学会使用makefile:5
- Makefile的使用 1
- Step 1 Nhibernate 学会简单使用
- 1分钟学会使用Tor代理教程
- 7天学会使用430单片机(1)
- 工作总结第一天,学会使用Git(1)
- [.NET] 学会使用 Visual Studio (1)
- 1个小时学会ReactiveCocoa基本使用
- 1分钟学会valgrind基础使用
- 1个小时学会ReactiveCocoa基本使用
- 2个小时学会写makefile
- 使用scons替代makefile(1)
- Makefile使用
- 使用 Makefile
- 【极客学院】-python学习笔记-3-单线程爬虫 (request安装遇到问题及解决,应用requests提取信息)
- 无缝滚动
- Insertion sort
- android通过led实现手电筒
- Wireshark(2):应用Wireshark观察基本网络协议
- 学会使用makefile:1
- VS2010 + Cmake + Qt4.8 简单的环境搭建实例。
- 微信各种号的关系
- 对象的克隆---原型模式(一):大同小异的工作周报,原型模式概述
- SugarCRM源码分析之loadComposer
- 手机浏览器和pc浏览器的width:100%的自适应问题
- H264帧的分析sps pps
- Dapper的基本使用
- MSSQLServer基础04(常用函数)