makefile的写法

转载 2009年02月04日 14:17:00

makefile是一种描述依赖关系的文件, 它主要描述的是整个工程编译规则, 同时也给工程的维护提供很大的方便. 这在大型工程中非常实用. 在写好makefile之后, 只需要在命令行输入make命令, 工程就按照既定的makefile规则进行"自动化编译".

1. 编译(compile)和链接(link):

我们通常所说的编译一般来说指的是编译和链接这两个过程的总称.

不管是什么类型的源文件(.c .cpp .pas .i...), 都需要先通过编译器中的编译单元生成目标文件(Object File), 它在Windows下是.obj文件, 在Linux下是.o文件, 这个过程叫作编译.

然后编译器的链接单元把这些生成的目标文件合成为可执行文件, 这时链接单元只使用这些目标文件, 并不关心源代码, 这个过程叫作链接.

在很多时候, 由于源文件的数目过于庞大, 编译后生成的目标文件数目也就很多, 在链接过程中由于需要指出所有目标文件, 这就显得很不方便, 于是我们可以把多个目标文件打个包.

在Windows下管这种文件叫库文件(Library File), 扩展名为.lib;

在Linux下这种文件叫Archive File, 扩展名为.a.

可见.lib和.a都是编译的产物而非链接的产物.

2. makefile:

我们首先看一个简单的makefile:

这里需要说明几个概念: 变量, 目标, 依赖.

变量: CC = g++, 这个CC就是一个在makefile里定义的变量, 在定义后可以使用, 使用时是$(CC).

目标和依赖: main.o: main.cpp base.h derive.h, 这个":"(冒号)分开的两边中, 左边就是目标, 右边就是该目标的依赖, 而下一行的命令就是对应于这一对目标/依赖关系的. 当需要实现这个目标时, 如果依赖中有更新, 就需要执行下面的命令.

比如, 当我们执行:

就会执行对应目标"clean"下的命令, 因为clean是没有依赖的, 所以这个命令总被执行.

3. 隐含变量:

在这个makefile文件中, 可以看到诸如$^ $< $@这样的东西, 这被我称为makefile的隐含变量.

$^: 指的是当前依赖中的所有对象.

$<: 指的是当前依赖中的第一个对象.

$@: 指的是当前目标.

makefile常用写法和简易写法

先说长用到的-l: 小写的l就是依赖的lib库,lib首字母,很好记。 -L: 引用的三方lib库所在目录,lib首字母大写就是目录,也好记。 -I: 少不了头文件目录,还是老路子,include...
  • persitail
  • persitail
  • 2016年09月20日 12:36
  • 725

常见的makefile写法

1、目标名称,摆脱手动设置目标名称 [cpp] view plain copy TARGET = $(notdir $(CURDIR))  all:$(TARGET)  ...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2017年03月06日 14:47
  • 498

makefile简易正确写法

为了使用g++编译jni,我上网查找资料,也下载了makefiel的教程。网上的资料大多乱七八糟,没法看。教程里面是一个片段一个片段的介绍的,根本不知道哪一个在上,哪一个在下。后经3个小时的不断尝试,...
  • rediculous
  • rediculous
  • 2015年12月08日 08:23
  • 1248

makefile 递归用法和.PHONY的讲解

makefile递归用法 http://www.360doc.com/content/11/1025/10/1671317_158884673.shtml .PHONY讲解 ht...
  • bsnry
  • bsnry
  • 2015年07月28日 20:25
  • 820

C++ makefile写法标准格式简介

在C++编程语言中,有很多种比较高深的内容值得我们去深入的探讨。即使是那些比较常用的功能,也还需要我们不断的从中挖掘出更多的信息。在这里我们先来为大家详细介绍一下C++ makefile写法的相关操作...
  • boyhailong
  • boyhailong
  • 2014年03月29日 12:20
  • 883

Makefile最简版本,看完你就会写Makefile了

大学有阵子做嵌入式的时候觉得Makefile简直高不可攀~~ 教程大多数都在试图把许多细节都讲清楚~~没有跟教程死磕3天的劲头真的不容易搞懂Makefile 而且写Makefile...
  • Sera_ph
  • Sera_ph
  • 2014年03月28日 13:04
  • 15963

makefile书写入门

首先声明,本篇文章是根据陈皓博客中的相关文章改写的。原因是那篇文章太全面了,而本文抽取了其中比较实用的几点,以一个使用者的角度来说明一下,makefile改怎么写,而且只限定是linux下的C语言的m...
  • cyfcsd
  • cyfcsd
  • 2016年07月29日 16:54
  • 2225

万能makefile写法详解,一步一步写一个实用的makefile,详解 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \

作者:胡彦 2013-5-21 代码和文档下载地址:http://pan.baidu.com/s/1pLBOZB9 (原来的老地址不小心删掉了,请用这个新的) 一 目的:编写一个实用的makefil...
  • huyansoft
  • huyansoft
  • 2013年05月14日 13:05
  • 10947

“万能makefile”写法详解,一步一步写一个实用的Makefile

本文转载自: 作者:胡彦 2013-5-21 出处:http://blog.csdn.net/huyansoft/article/details/8924624提示:本文在原博文的基础上做了一点...
  • QQ1452008
  • QQ1452008
  • 2016年03月12日 14:53
  • 2202

makefile写法整理

1  Makefile基本语法 Makefile:程序模块的内部关系决定了源程序编译和链接的顺序,通过建立makefile可以描述模块间的相互依赖关系。Make命令从中读取这些信息,然后根据这些信息...
  • crazybc
  • crazybc
  • 2012年07月02日 21:44
  • 2062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: makefile的写法
举报原因:
原因补充:

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