Linux内核完全注释 阅读笔记:3.6、Make程序和Makefile文件
<p style="text-indent: 2em;">最近这段时间一直在学习minix 文件系统1.0的内容,想着在Windows上通过自己编写的软件直接将文件传输到Linux 0.11的硬盘上(功能类似于FTP工具),这样就不需要自己搭一个虚拟机这么麻烦了,而且文件交互更方便,目前完成了基础功能,等完全弄好之后,会在我的博客上进行发布的,敬请关注<img src="/UEditor/dialogs/emotion/images/face/i_f03.gif"/>。下面进入本文的内容。<br/></p><p style="text-indent: 2em;">Makefile(或makefile)文件是make工具程序的配置文件。make工具程序的主要用途是能自动的决定一个含有很多源程序文件的大型程序中哪个文件需要被重新编译。Makefile的使用比较复杂,这里只作简单的介绍,详细说明请参考GNU make使用手册。<br/></p><p style="text-indent: 2em;">Makefile用于告诉make要做些什么工作。make的执行过程分为两个不同的阶段。在第一个阶段,它读取所有的Makefile文件以及包含的Makefile文件等,记录所有的变量及其值、隐式的或显式的规则,并构造出所有目标对象及其先决条件的一幅全景图。在第二阶段期间,make就使用这些内部结构来确定哪个目标对象需要被重建,并且使用相应的规则来操作。<br/></p><p style="text-indent: 2em;">当make重新编译程序时,每个修改过的C代码文件必须被重新编译。如果一个头文件被修改过了,那么为了确保正确,每一个包含该头文件的C代码程序都将被重新编译。每次编译操作都产生一个与源程序对应的目标文件。最终,如果任何源代码文件被编译过了,那么所有的目标文件不管是刚编译完的还是以前就编译好的必须连接在一起以生成新的可执行文件。<br/></p><p style="text-indent: 2em;">简单的Makefile文件含有一些规则,这些规则具有如下形式:<br/><span style="color: rgb(0, 112, 192);">目标(target)…:先决条件(prerequisites)…<br/> 命令(command)<br/> ...</span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);"> ...</span><br/></p><p style="text-indent: 2em;">其中’目标’对象通常是程序生成的一个文件的名称,例如是一个可执行文件或目标文件。目标也可以是所要采取活动的名字,比如’清除’(clean)。’先决条件’是一个或多个文件名,是用作产生目标的输入条件。通常一个目标依赖几个文件。而’命令’是make需要执行的操作。一个规则可以有多个命令,每一个命令自成一行。<span style="color: rgb(255, 0, 0);">注意:你需要在每个命令行之前键入一个制表符(也就是tab)!</span><br/></p><p style="text-indent: 2em;">自动变量是一种在命令行上根据具体情况能被自动替换的变量。自动变量的值是基于目标对象及其先决条件而在命令执行前设置的。这里列举一些比较常用的自动变量:<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">$^:表示规则的所有先决条件,包括它们所处目录的名称;<br/></span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">$<:表示规则中的第一个先决条件;<br/></span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">$@:表示目标对象。</span><br/></p>
你可能也喜欢:
暂无评论,要不要来个沙发
发表评论
JLink V9掉固件修复(灯不亮) 3Zephyr笔记2 - 在STM32F429上运行HelloWorld 2计算NandFlash要传入的行地址和列地址 1Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式 0Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式 0Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2) 0
标签云
Linux嵌入式实用技巧ARM内核学习问题集合CC++编程语言阅读笔记汇编Linux内核完全注释Windows驱动开发计算机基础ARM11ARMv7-ASTM32IDESublimeLinux内核学习eMMCMMC子系统Ubuntu操作系统OfficeVMWareAPUEgccRTOS中断漫游世界随笔感悟开发工具软件应用编程VsCodearmccarmclang编译器ZephyrSPIJLink网卡驱动安装各种芯片库函数NFSμCOS内核sambaFlashUnix命令与脚本输入法Linux内核设计与实现gitRIFFWAVJATGFTPar8161安装centos有线上网μCGUI字库工程建立右键菜单网络文件系统Firefox百度NTFS文件系统CodeBlocksCentOS数据结构算法PhotoShop51KeilQTUltraEditscanfglibc宏定义UIDGID优先级娱乐天地SourceInsight磁盘扇区总线I2CPDFBComparePythonI2SFPUMakefileSWDCPUARP软件推荐FileZilla