Linux之make 、makefile的使用方法

◊make是什么?

  make是一个命令工具,是一个解释makefile中指令的命令工具。它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。make 会自动的判别原始码是否经过变动了,而自动更新执行档。

◊为什么要使用make?

  假设,现在一个项目里面包含了100个程序文件,如果要对这个项目进行编译,那么光是编译指令就有100条。如果要重新进行编译,那么就又得像之前一样重新来一遍。这样重复且繁琐的工作实在是让我们很不爽啊。所以,用make来进行操作,间接调用gcc岂不是很方便?如果我们更动过某些原始码档案,则 make 也可以主动的判断哪一个原始码与相关的目标文件档案有更新过, 并仅更新该档案。这样可以减少重新编译所需要的时间,也会更加方便。

◊makefile又是干什么的?

  makefile其实就是一个文档,里面定义了一系列的规则指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,它记录了原始码如何编译的详细信息! makefile一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  先看一下makefile的规则:

    目标(target):目标文件1 目标文件2

     <Tab>gcc -o 欲建立的执行文件 目标文件1 目标文件2

  目标(target)就是我们想要建立的信息,而目标文件就是具有相关性的 object files ,建立执行文件的语法就是以 <tab> 按键开头的那一行!特别留意,『 命令行必须要以 tab 按键作为开 头』才行!它的规则基本上是这样的:
  •在 makefile 当中的 # 代表批注;
  •<tab> 需要在命令行 (例如 gcc 这个编译程序指令) 的第一个字符;
  •标的 (target) 与相依档案(就是目标文件)之间需以『 :』隔开。

下面举个例子说明:

  先分别创建三个文件,如图

  

创建一个makefile文件,然后进行规则编写

  

现在就可以使用make命令编译文件了,这样是不是很方便呢?

  

  如果不想让编译规则显示在屏幕上,只要在makefile里规则编写前加个@它就不会显示了~

  如果现在再对文件编译一次会发生什么?嘿嘿,大家可以自己试一下。

  如果想要下达一 个指令就直接清除掉所有的目标文件与执行文件,又该怎么做呢?

  我们可以在makefile里面定义一个clean,执行rm的操作。但是有一点要注意的是,在这里我们最好使用伪目标进行操作。makefile里伪目标用.PHONY进行声明。当一个目标被声明为伪目

标后,make在执行规则时不会去试图去查找隐含规则来创建它。这样就提高了make的执行效率,也解决了文件目录中如果出现名为clean文件,clean操作不被执行的问题。

 

  

时间: 2024-10-17 15:12:10

Linux之make 、makefile的使用方法的相关文章

【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】

本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加内核启动Hello World 任务: 内核启动的时候加载Hello驱动,并打印出Hello World 步骤: (1)在drivers目录下新建hello文件夹,在里面实现相应的hello.c.Makefile.Kconfig (2)修改上一级(Linux-3.4.2/drivers下)的Make

Linux笔记之Makefile

规则: 目标 : 依赖 命令 make是如何工作的: (1)make在当前目录下寻找makefile或Makefile. (2)如果找到,他会寻找文件中的第一个目标文件(target),并把这个文件作为第一个目标. (3)如果目标文件不存在,或者目标文件所依赖的.o文件修改时间要比目标文件新,那么,就会执行后面所定义的命令来生成目标文件. (4)如果目标文件所以依赖的.o文件也存在,那么make会在当前文件中寻找目标为.o文件所依赖性,如果找到则再根据这一规则生成.o文件.(这有些像堆栈的过程.

Linux中的gpio口使用方法

Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h> 判断一个IO是否合法:int gpio_is_valid(int number); 设置GPIO的方向,如果是输出同时设置电平:/* set as input or output, returning 0 or negative errno */int gpio_direction_input(unsi

Linux运行与控制后台进程的方法:nohup, setsid, &amp;, disown, screen

Linux运行与控制后台进程的方法:nohup, setsid, &, disown, screen 转自http://heylinux.com/archives/1282.html#more-1282 我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败.这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程.解决办法有两种:让进程忽略HUP信号,或让进程运行在新

Linux操作系统性能调优的方法

Linux操作系统性能调优的方法 2013-03-18 15:35 HonestQiao ChinaUnix 字号:T | T Linux是一套免费使用和自由传播的类Unix操作系统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能.本文分享了几种技巧对Linux操作系统进行性能的优化. AD:2014WOT全球软件技术峰会北京站 课程视频发布 按照传统,Linux不同的发行版本和不同的内核对各项参数及设置均做了改动,从而使得系统能够获得更好的性能.

【Linux学习】Makefile学习(二)

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 40975    Accepted Submission(s): 13563 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

Linux在应用层读写寄存器的方法

今天有同学去百度,带回一道面试题,和大家分享一下: 打印: n=1 1 n=2 3 3 2 4 1 1 4 5 5 n=3 7 7 7 7 6 8 3 3 2 6 8 4 1 1 6 8 4 5 5 5 8 9 9 9 9 提供一段参考程序: <pre name="code" class="cpp">// ConsoleApplication1.cpp: 主项目文件. #include "stdafx.h" #include &quo

Linux dos2unix和unix2dos是的使用方法

我们都知道Linux上的文件下载到windows系统上格式就乱了, 那我们怎么办那 ?现在我教大家一个简单的方法来解决Linux系统的文件下载到windows系统上会出现的文件格式乱的情况. dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text fileformat converter).DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D0A.而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A. DOS格

Linux下Git和GitHub使用方法总结 (码云)

初学先记住这几条,其他慢慢研究. 下面讲如何用码云完成一个项目的提交, 我的步骤 https://git.oschina.net/phpervip/qianzhu(此例:一个企业模板): 先在码云上注册一个帐号. 然后新建项目,就有一个git地址. 本地进入你的项目目录. 初始化项目->建远程连接->获取项目->添加版本->版本提交->远程提交 git init git remote add origin https://git.oschina.net/phpervip/qi

Linux/Unix分配进程ID的方法以及源代码实现

在Linux/Unix系统中.每一个进程都有一个非负整型表示的唯一进程ID.尽管是唯一的.可是进程的ID能够重用.当一个进程终止后,其进程ID就能够再次使用了. 大多数Linux/Unix系统採用延迟重用的算法,使得赋予新建进程ID不同于近期终止进程所使用的ID,这主要是为了防止将新进程误觉得是使用同一ID的某个已终止的先前进程.本文讨论了Linux/Unix分配进程ID的方法以及源代码实现. 分配进程ID的方法 在大多数Linux/Unix系统中,生成一个进程ID方法是:从0開始依次连续分配,