C++学习笔记24:makefile文件
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文件的更多相关文章
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- thinkphp学习笔记2—入口文件
原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- Linux 编程学习笔记----动笔makefile档
Befroe Beginning. 在设置暑假的plan ,关于Linux的书籍如今在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 如今開始关于Linux ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Windows phone 8 学习笔记(2) 数据文件操作(转)
Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- matlab学习笔记4--多媒体文件的保存和读取
一起来学matlab-matlab学习笔记4 数据导入和导出_2 多媒体文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...
随机推荐
- 【前端】Web前端学习笔记【1】
... [2015.12.02-2016.02.22]期间的学习笔记. 相关博客: Web前端学习笔记[2] 1. JS中的: (1)continue 语句 (带有或不带标签引用)只能用在循环中. ( ...
- [问题2014A01] 复旦高等代数 I(14级)每周一题(第三教学周)
[问题2014A01] 试求下列 \(n\) 阶行列式的值: \[ |A|=\begin{vmatrix} 1 & x_1(x_1-a) & x_1^2(x_1-a) & \ ...
- Javascript学习笔记:对象的属性类型
在ECMAScript中有两种属性:数据属性和访问器属性 1.数据属性 configurable:表示能否通过delete删除属性从而重新定义属性:或者能否修改属性的特性:或者能否把属性修改为访问器属 ...
- MSDN for VS2012 的安装
在VS2012中,由于MSDN默认不内置,VS2008 以上的就没有独立的 MSDN 了 ,而是被 Microsoft Help Viewer 取代了. 该组件包含在 VS2012 的 ISO 安装镜 ...
- shiro的Helloworld
package shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePassword ...
- Java命令提示符编译
Java利用命令提示符编译 1:最简单的方式:直接编译 /** 文件路径:G:\测试项目\java\src 文件名称:JacaText.java 编写时间:2016/6/2 作 者:郑晨辉 编写说明: ...
- Workspace defines a VM that does not contain a valid jre/lib/rt.jar: C:\Program Files\Java\jre7
Maven编译时两则信息 (Workspace以及default classpath container) 博客分类: Java 使用Maven一年有余,却总是被两则不起眼的编译信息困扰,终想查明 ...
- 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误
客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器.请验证实例名称是否正确 ...
- 怎么写jq插件?
1.概述 先看看html代码 <ul id="catagory"> <li><a href="#">jQuery</a ...
- JavaWeb高级:Servlet源码分析
很多东西归根结底是对Servlet源代码的了解,通过学习源代码加深了解Java高级特性