makefile

make命令:负责c/c++程序编译与链接

  • make根据指定命令进行建构
  • 建构规则文件:GNUmakefile , makefile,Makefile

makefile 文件格式

makefile 语法

--基本语法,变量,条件判断,循环,函数

makefile 文件的基本格式

target...:prerequisites...

[tab键]  commands

makefile文件的规则

  • makefile 文件由一系列规则构成
  • 规则目的:建构目标的先决条件是什么以及如何构建目标
  • 如果没有指定目标,缺省执行第一个目标
  • 若prerequisites中有一个以上的文件比target文件要新,执行commands所定义的命令

target:目标

  • 通常为编译期的文件名,以指定要建构的对象,也可以是执行文件,还可以是标签(操作名称,伪目标)
  • 可以是单一目标,也可以为空格分隔的多个目标
  • 每个目标都定义了一组处理规则,和其相关规则构成规则链

prerequisites:先决条件

  • 为生成该目标所需要的先决文件或者目标(前置条件)
  • 一般为空格分隔的文件名,指定目标是否重建的判断标准,即只要有一个先决条件不存在或者有过更新,就需要重建目标

prerequisites:先决条件

若目标先决条件本身需要重建,则匹配该先决条件的目标,执行其对应的命令

commands:命令

由一行或者多行shell命令组成,命令前有Tab键

指示如何建构目标,一般为生成目标文件

每行命令都在单独的进程中执行,彼此没有继承关系,不能简单传递数据;解决办法是:用分号将多条命令书写在单行(此时可用“\”折行),或者为该条规则添加指示“.ONESHELL:”

伪目标:操作名称,而不是文件名

  • 删除编译后的二进制目标文件,例如:

clean:

    rm -f *.o

执行命令时需指定伪目标:$make clean

若当前目录下有clean文件,则此规则不会被执行;此时可用“.PHONY:clean”明确指示clean为伪目标;

make将跳过文件检查,执行其对应的命令

执行清除任务的伪目标一般放在脚本的最后

伪目标惯例

  • all:所有目标的目标,一般为编译后所有的目标,对同时编译多个程序很有用
  • clean:删除由make创建的文件
  • install:安装已编译好的程序,主要任务是完成目标文件的拷贝
  • print:列出改变过的源文件
  • tar:打包备份源文件,形成tar文件
  • dist:创建压缩文件,一般将tar文件压缩成Z文件或者gz文件
  • TAGS:更新所有的目标,以备完整地重新编译使用
  • check和test:一般用来测试makefile的流程

例子:假设程序主文件为:main.c,使用library库

#注释行

prog:main.o library.o

  cc -o prog main.o library.o

main.o: main.c library.h

  cc -c main.c

library.o:library.c library.h

  cc -c library.c

.PHONY:clean

clean:

  rm main.o library.o

接下里:make(生成prog)

    make clean

C++学习笔记24:makefile文件的更多相关文章

  1. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  2. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  3. thinkphp学习笔记2—入口文件

    原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...

  4. matlab学习笔记5--低级文件输入输出函数

    一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...

  5. Linux 编程学习笔记----动笔makefile档

    Befroe Beginning. 在设置暑假的plan ,关于Linux的书籍如今在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 如今開始关于Linux ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Windows phone 8 学习笔记(2) 数据文件操作(转)

    Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...

  8. Python学习笔记之从文件中读取数据

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...

  9. matlab学习笔记4--多媒体文件的保存和读取

    一起来学matlab-matlab学习笔记4 数据导入和导出_2 多媒体文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...

随机推荐

  1. C#:类和结构的区别

    第一.引用类型和值类型 类属于引用类型,而结构属于值类型. 结构在赋值时进行复制. 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据. 第二.继承性 类可以继承类 ...

  2. 12款最佳Linux命令行终端工具, 20款优秀的 Linux 终端仿真器

    12款最佳Linux命令行终端工具     如果你跟我一样,整天要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件,那你真是找对了文章.我这里搜集了一些非常有趣的 ...

  3. runtime运行机制方法学习

    runtime这玩意第一次听说时都不知道是什么,经过了解后才知道它就是oc动态语言的机制,没有它那oc就不能称为动态语言.在之前可能大家对runtime了解都不深,随着编程技能的日益加深和需要,大家开 ...

  4. D3.js 做一个简单的图表(条形图)

    柱形图是一种最简单的可视化图标,主要有矩形.文字标签.坐标轴组成. 本文为简单起见,只绘制矩形的部分,用以讲解如何使用 D3 在 SVG 画布中绘图. 一. 画布是什么 前几章的处理对象都是 HTML ...

  5. IntelliJ IDEA 修改包名

    1.首先将AndroidManifest的Package Name重命名(快捷键shift+F6或者右键Refctor然后Rename)这时Package Name就改变了,但是Src的文件名还没变2 ...

  6. 支持向量机(SVM)算法

  7. MySQL 循环执行kill语句杀掉连接

    mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用ki ...

  8. MVC4中的Display Mode简介

    本文地址:http://www.cnblogs.com/egger/p/3400076.html  欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 今天学习MVC4时,看到一个不错的特性"vie ...

  9. Java内存分配

    概述 对从事C和C++的程序员来说,在内存管理方面,他们既是拥有最高权利的人,也是从事最基础工作的“劳动人民”. 而对于Java程序员来说,JVM自动进行内存管理,程序员不再需要为每一个new操作去写 ...

  10. Mysql:The table‘xxxx’is full

    下午跑程序,在插入mysql时突然报错: "The table'xxxx'is full" 而之前一直没问题的. 上网查了一下,都说临时表的问题,需要设置"tmp_tab ...