1. make规则

如果工程没有被编译过,则所有的c文件都要编译和链接

如果工程的某几个c文件被修改,那么只编译被修改的文件,并链接目标程序

如果工程的头文件被修改,需要编译引用了此头文件的c文件,并链接目标程序

2. make的核心

target:prerequisites

command

target: 为目标文件,执行文件或标签(伪目标)

prerequisites: 生成target所需要的文件或目标

comman: make所需要执行的命令

example:

PamXml: XmlConfig.o PamXml.o

  cc -o PamXml XmlConfig.o PamXml.o

XmlConfig.o: XmlConfig.cpp XmlConfig.h

  cc -c XmlConfig.cpp

PamXml.o: PamXml.cpp PamXml.h

  cc -c PamXml.cpp

clean:

  rm PamXml XmlConfig.o PamXml.o

目标文件(target)即是PamXml和中间目标文件XmlConfig.o,PamXml.o,依赖文件即是冒号后面的cpp文件,每个.o文件都有一组依赖文件。.o文件又是可执行文件PamXml的依赖文件。

定义好依赖关系之后,后续的那一行为如何生成目标文件的操作系统指令,以tab键开头。make会比较依赖文件和目标文件的修改日期,以此来决定是否执行后续的操作系统命令。其中clean不是文件,只是一个动作名字,没有依赖文件,make不会自动执行后续定义的命令,如要执行需要显示指定。如:make clean.

3. make的工作方式

make在当前目录下寻找名为Make或make的文件;

若找到,则会找文件中的第一个目标文件,并作为最终的目标文件;

若目标文件不存在,或是依赖的.o文件的修改时间比此目标文件新,那么会执行后续定义的命令来生成该目标文件;

再根据依赖性,生成.o文件,并最终生成可执行文件。

make会一层又一层的去找文件的依赖关系,直到最终编译出第一个目标文件。

4. make中使用变量

上面的例子可以改写为:

objs=XmlConfig.o PamXml.o

PamXml: ${objs}

  cc -o PamXml ${objs}

XmlConfig.o: XmlConfig.cpp XmlConfig.h

  cc -c XmlConfig.cpp

PamXml.o: PamXml.cpp PamXml.h

  cc -c PamXml.cpp

clean:

  rm PamXml ${objs}

5. make的自动推导

make可以根据一个.o文件自动推导出所依赖的.c文件,也能够推导出cc -c .c,则可以重新编写makefile

objs=XmlConfig.o PamXml.o

PamXml: ${objs}

  cc -o PamXml ${objs}

XmlConfig.o: XmlConfig.h

PamXml.o: PamXml.h

.PHONY: clean

clean:

  rm PamXml ${objs}

.PHONY表示clean是个伪目标文件。

对于clean,可以写成 -rm PamXml ${objs},”-“表示如果某些文件出现问题,不用管继续下面的事。

最新文章

  1. 为WebService指定线程池
  2. MYSQL的深入学习--优化步骤
  3. nginx实战2---浏览器设置缓存
  4. HDFS的概念
  5. Oracle Database常用补丁集Patch号及各版本PSU
  6. G面经prepare: Set Intersection && Set Difference
  7. MySQL在windows系统中修改datadir路径后无法启动问题,报错1067
  8. linux 杀死进程的方法
  9. MTK6577 Android源代码目录
  10. 一个基于MBProgressHUD的自定义视图hud例子
  11. yii
  12. WPF——数据绑定及属性改变事件
  13. linux —— shell 编程(编程语法)
  14. RenderPartial: No overload for method 'Write' takes 0 arguments
  15. ubuntu 安装maven提示出错 The program 'mvn' can be found in the following packages
  16. ecshop 分页小记
  17. 队列(FIFO)—循环队列、队列的链式存储
  18. json转换字符串
  19. jhipster安装_Windows
  20. Project Euler Problem8

热门文章

  1. 【进阶技术】一篇文章搞掂:OAuth2
  2. composer proc_open(): fork failed – Cannot allocate memory
  3. day17—Flex弹性布局详解(一)
  4. mysql错误:1093-You can’t specify target table for update in FROM clause的解决方法
  5. eval方法遇到的问题
  6. 【ABAP系列】SAP ABAP基础-程序优化及响应速度之LOOP
  7. 使用母版页的Web窗体不走Page_Load
  8. 线程局部存储tls的使用
  9. Spring学习(一)--简化Java开发,认识Spring
  10. 两台centos,用yum install 安装,一台成功,一台失败