makefile笔记

一、构建背景知识

源代码(.c,.cpp)编译生成目标代码(如:.obj,.o),目标代码链接生成可执行代码(.exe,.dll)。

对目标代码打包生成库文件(如:.lib,.a)

为了简化构建程序的过程,可以把编译和链接的指令放到一个文件中,这个文件就是makefile文件,

makefile文件最终要通过一个make工具来解释执行,不同的make工具定义的makefile文件会有不同。

 

二、makefile的核心规则:

target...:dependency...

  command

解释:

target:执行command产生的目标

denpendency:产生target的所有依赖文件

command:shell指令,在makefile中必须以【tab】字符开始。

 

三、makefile中定义变量

makefile中的变量相当于宏,定义语法为:

name=value

name表示变量的名字,value表示变量的值,如:GDAL_ROOT=.

使用变量的语法为:$(name),如:CPLLIB =    $(GDAL_ROOT)/port/cpl.lib

 

四、make工具的自动推导规则(隐式规则)

make工具有自动推导功能,比如要生成一个a.obj目标文件,make工具自动推导出需要依赖a.cpp文件,因此a.cpp在依赖的位置上可以不写。

.PHONY:clean //表示clean是个伪目标,要执行伪目标的command,需要在make工具执行的时候,显示地加上伪目标名称这个参数,如:nmake /f makefile.vc clean

clean:

  -rm a.obj

 

五、细节

1、makefile里有什么?

  makefile里包含5个部分:显式规则,隐式规则,变量定义,文件指示,注释。

  显式规则:就是有makefile的作者显式指出规则的各个部分(目标,依赖,命令);

  隐式规则:这个功能由make工具提供,可以省略某些依赖和命令,交由make工具自动推导。

  变量定义:上面有解释,不说了。

  文件指示:包含三部分:1.一个makefile包含另一个makefile,#include;2.指定makefile中的有效部分,#if;3.定义一个多行的命令

  注释:以字符#开始到行尾的部分为注释

 

2、makefile里的通配符:

  ~:表示用户宿主目录,windows下表示%HOME%目录,

  *:表示任意名称的文件如:*.c

  ?:

  [...]:

 

 

 

 

 

 

 

 

posted on 2013-09-04 18:11  leungrs  阅读(260)  评论(0编辑  收藏  举报