GNU make 101

原创 2015年11月18日 17:51:22

GNU 项目自动构建工具 Make

用途:自动化构建工具,通过编写处理不同情况的脚本(Make工具使用,存储为MakeFile文件,扩展名是.mk)来达到自动构建并且智能构建的目标。

程序的编译过程和产生物
源文件(.c/.cpp) - 编译 - 中间文件(Windows:.obj; UNIX:.o) - 连接 - 可执行文件(Windows:.exe; UNIX:.out) - 打包 - 可运行库(Windows:.dll; UNIX: .so)
- 归档 - 库文件(Window:.lib; UNIX:.a)

常见项目构建任务

  • 源码均为编译,对全部源码编译
  • 部分源码经过修改,对修改过的源码重新编译
  • 部分头文件修改,对引入修改过的头文件的源码重新编译

问题:#include <a.h> 找不到头文件,而 “a.h”却可以找到头文件
问题:脚本文件名为makefile则可以执行,如果为makefile.mk则不可执行

make 101

make脚本由如下的单元构成:

target:prerequisites
    command

该指令对应的自然语言描述为“要获取target,需要使用prerequisites中指定的资源依赖,并对这些资源执行command;如果target的版本比较prequisites的版本新,那么就重新执行命令”。target定义要获取的目标,prerequisites定义获取目标需要处理的文件,command定义对prerequisite的处理。

  • 如果没有prerequisite,那么默认就不执行该target处理(即不执行对应的command),需要通过 make target的方式来执行;
  • command前一定要有一个Tab;
  • 如果命令行过长,可以使用反斜杠()来连接位于多行的命令

make如何知道target没有prequisites新?

make通过比较文件的修改日期来比较

高级1:使用变量来定义重复使用的字符串

定义:varname=varvalue
引用:将原本字符串替换为$(varname)

高级2:利用make的自动推导功能减少构建脚本编写量

make能够自动推导使用的依赖和命名:编译fileName.c文件则不需要声明fileName.o的依赖和执行cc -c fileName.c

习惯1:每个makefile都声明一个清空生成物的target,放在结尾不要放在开头。rm前加上-表示如果出现问题忽略。

高级3:引入其他makefile

在需要引入其他makefile的地方使用 include filename 来引入

问题:错误使用include,将其放在文件头部而不是需要引入的地方

版权声明:本文为博主原创文章,未经博主允许不得转载。本文遵循 Creative Commons Attribution-Noncommercial-Attribution-Share Alike License 3.0 协议

《GNU make项目管理》笔记--简单的makefile

make定义了一种语言,可用来描述源文件、中间文件以及可执行文件之间的关系。它还提供了一些功能,可用来管理各种 候选配置、实现可重用程序库的细节以及让用户自定义宏将过程参数化。简言之,make常被视为...
  • TODD911
  • TODD911
  • 2015年01月15日 21:56
  • 1740

GNU-makefle (一) 基本介绍

参考链接:http://blog.csdn.net/haoel/article/details/2886 android ndk编译,和源码环境下的编译需要写一个mk文件,其实它就是makefile文...
  • jjwwmlp456
  • jjwwmlp456
  • 2014年11月06日 16:16
  • 1272

Windows安装GNU编译器使用makefile

Windows安装GNU编译器使用makefile 一、下载安装MinGW MinGW下载网页:http://sourceforge.net/projects/mingw/files/latest...
  • pdcxs007
  • pdcxs007
  • 2013年02月16日 12:52
  • 44147

IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(4)流、管道和重定向

摘要: 也许你觉得流和管道让Linux专家看起来像管道工人一样,那么让我们来看看究竟,并且学习一下重定向和多路输出。还会学到把一个流作为命令的参数。 概述: 本文教会你关于重定向标准输入输出流的...
  • smstong
  • smstong
  • 2013年06月26日 18:19
  • 1375

IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(2)文本流和过滤器

引言:对于文本操作来说,除了剪切和粘贴外还有更多的操作,尤其是不使用GUI的时候,这更明显。在本文中,作者讲解了使用GUN文本工具包来进行文本处理。学完本文,你将会像专家一样处理文本。 概述:本文介...
  • smstong
  • smstong
  • 2013年05月07日 18:30
  • 1780

IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(3)文件和目录管理

引言:你可能已经听说过在Linux中一切皆是文件,所以一定要打好基础,把文件和目录的管理如查找、列出、移动、复制、打包等学扎实。本文针对LPI 101考试,当然读者也可以为了兴趣来学习。 摘要:本文...
  • smstong
  • smstong
  • 2013年05月09日 15:57
  • 2122

Unix/Linux GNU make中文手册

  • 2015年02月05日 22:27
  • 1.16MB
  • 下载

GNU make中文手册

  • 2010年07月31日 14:53
  • 1.59MB
  • 下载

GNU make Manual ver-3.8

  • 2010年09月08日 00:47
  • 1.15MB
  • 下载

GNU Make手册(中文版+英文版)

  • 2011年10月10日 07:38
  • 1.58MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GNU make 101
举报原因:
原因补充:

(最多只允许输入30个字)