第2课 - 初识makefile的结构
第2课 - 初识makefile的结构
1. makefile 的意义
(1)makefile 用于定义源文件之间的依赖关系 (在阅读开源软件源码时,可通过Makefile掌握源码中各个文件之间的关系)
(2)makefile 说明如何编译各个源文件并生成可执行程序
2. makefile 的规则
(1)makefile 规则的定义
形式1:targets : prerequisites ; command
形式2:targets : prerequisites
'\t' command
(2)makefile 规则中各元素的含义
targets 目标
- 通常是需要生成的目标文件名
 - make 所需执行的命令名称
 
prerequisities 依赖
- 当前目标所依赖的其它目标或文件
 
command 命令
- 完成目标所需要执行的命令(系统自带命令 — PATH 环境变量、用户命令 — 自己指定路径)
 
(3)规则中的注意事项
targets 可以包含多个目标
- 使用空格对多个目标进行分隔
 
prerequisities 可以包含多个依赖
- 使用空格对多个依赖进行分隔
 
[Tab] 键: '\t'
- 每一个命令行必须以 [Tab] 字符开始
 - [Tab] 字符告诉 make 此行是一个命令行
 
续行符: \
- 可以将内容分开写到下一行,提高程序的可读性
 
makefile可以在命令前添加 @ 符号,使该命令静默执行
(4)一个 makefile 的规则示例
all : test
echo "make all" test :
echo "make test"
3. makefile依赖(prerequisites)的规则
(1)当目标对应的文件不存在时,执行对应的命令
(2)当依赖在时间上比项目更新时,执行对应命令
(3)当依赖关系连续发生时,对比依赖链上的每一个目标
4. makefile编程实验
//mian.c源码 int main(void)
{
func();
return ;
}
//func.c源码 #include <stdio.h> void func()
{
printf("hello make!\n");
}
#makefile源码 hello.out all : main.o func.o
gcc -o hello.out main.o func.o main.o : main.c
gcc -o main.o -c main.c func.o : func.c
gcc -o func.o -c func.c
(1)工程开发中可以将 最终可执行文件名 和 all 同时作为makefile中第一条规则的目标。但最终可执行文件名要放在all之前,make默认使用多个目标中的首个目标。这样做的好处是当默认执行make时,make会自行判断依赖关系有没有发生更新,如果没有就不会重新编译程序。如果这里用all作为目标,由于不存在all这个文件,每次执行make时,第一条规则的命令 总会被执行,这与实际不符。如果需要强制编译该程序,执行 make all 即可。
(2)makefile不仅可以用在C/C++中,同样可以用在其它编程语言中,如Java等。makefile只是解决问题的一种方法,但普遍应用于C/C++中。
注:本文整理于《狄泰12月提升计划》课程内容
狄泰QQ群:199546072
第2课 - 初识makefile的结构的更多相关文章
- Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象
		
Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...
 - python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象
		
https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...
 - Linux0.11之初识Makefile/build.c
		
前言 Makefile对于从来没有接触过的人来说是相当别扭的(比如我),但它确实又是非常重要的,它描述了一个Image是如何形成的,理解它也许并不能帮我解决实际问题,而且编写Makefile的工作也许 ...
 - 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
		
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...
 - html 初识  文档结构  常用标签
		
HTML初识 △HTML: 超文本标记语言,是一种用于创建网页的标记语言,不是编程语言,没有逻辑 本质上是浏览器可识别的规则 我们按照规则写网页,浏览器根据规则渲染我们的网页.对于不同的浏览器,对同一 ...
 - 初识makefile
		
Makefile的规则 目标 : 需要的条件 (注意冒号两边有空格) 命令 (注意前面用tab键开头) 解释一下: 1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是 ...
 - 初识B/S结构编程技术
		
B/S结构编程语言 ASP(Active Server Page 动态服务器页面)技术 微软早期推出的B/S编程技术,出现在JSP和ASP.NET之前,PHP当时也很不稳定.ASP之前,动态网站使用G ...
 - tensorFlow入门实践(三)初识AlexNet实现结构
		
参考黄文坚<TensorFlow实战>一书,完成AlexNet的整体实现并展望其训练和预测过程. import tensorflow as tf batch_size = 32 num_b ...
 - makefile笔记1 - 初识makefile
		
前情提要 上一篇<编译入门>讲了变成的基本问题.如果源文件只有一个,就如之前的例子,那么用gcc命令直接编译就可以了.但是很多实际的工程用到的源文件都是相当多的,这时候用命令一个个编译是很 ...
 
随机推荐
- python3 - selenium 添加有账号密码的代理
			
from selenium import webdriver import string import zipfile # 打包Google代理插件 def create_proxyauth_exte ...
 - 第2章 RDD编程(2.3)
			
第2章 RDD编程(2.3) 2.3 TransFormation 基本RDD Pair类型RDD (伪集合操作 交.并.补.笛卡尔积都支持) 2.3.1 map(func) 返回一个新的RDD,该 ...
 - 【论文总结】MapReduce论文
			
摘要: MR是啥:编程模型,用户只需编写Map,Reduce两个函数,系统完成分布式计算 MR系统是啥:在大量普通计算机上实现并行化计算,系统只关心如何分割数据.大规模集群的调度.集群容错.集群通信 ...
 - Sqlalchemy 事件监听与初始化
			
sqlalchemy不仅仅能自动创建数据库,更提供了其他更强大的功能,今天要介绍的就是sqlalchemy中的事件监听,并将其应用到数据库的初始化中. 需求:当插入设置password字段时,自动加密 ...
 - 仿京东BOE官网   jQuery代码
			
$(function() { $("#chanping").mouseenter(function() { $("#column").slideDown(500 ...
 - 第五篇Scrum冲刺博客--Interesting-Corps
			
第五篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 音乐详情页面跳转.设计及布局实现设计 搜索页面以及音乐详情页面数据导入及测试 叶学涛 编写分 ...
 - 个人项目WordCount(C++/QT)
			
个人项目WordCount(C++/QT) GitHub项目地址:https://github.com/Nova-cjp/Word-Count 百度云链接:https://pan.baidu.com/ ...
 - kali安装open-vm-tools实现虚拟机交互
			
普通的VMware tools 弱爆了 安装具有复制粘贴功能的open-vm-tools.servic: 切记:如果之前已经安装了VMware tools,一定要删除:vmware-uninstall ...
 - 扫描仪文字识别ORC软件加强版(文通慧视完整版)下载
			
http://www.wocaoseo.com/thread-300-1-1.html 扫描文字识别软件想必做seo的都知道是做什么用的,但是目前免费的OR大多不太好用或者说不够功能强大,因为这些软件 ...
 - .Net自动更新程序GeneralUpdate,适用于wpf,winfrom,控制台应用
			
什么是GeneralUpdate: GeneralUpdate是基于.net framwork4.5.2开发的一款(c/s应用)自动升级程序. 第一个版本叫Autoupdate(原博客: WPF自动更 ...