Makefile文件
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
Makefile性质:shell脚本性质,可以执行操作系统的命令
Makefile格式:
目标 ...:依赖 ...
命令
命令
...
...
- 目标:可以是object文件,也可以是可执行文件
- 依赖:生成目标所需要的文件
- 命令:make需要执行的命令(任意的shell命令),Makefile中的命令必须以 [tab] 开头
PRO_DIR = $(shell cd .. && pwd)解释
首先执行cd ..,如果这条命令执行成功,则执行pwd命令,最后将运行的结果赋值为PRO_DIR
CC = $(CROSS_COMPILE)gcc
定义要使用的编译器,非交叉编译的场合,CROSS_COMPILE为空,所以使用的就是gcc,交叉编译时(如在X86 PC上编译在ARM上运行的软件),CROSS_COMPILE会定义为类似于arm_linux_gnu_的值,这时会使用交叉编译器(如arm_linux_gnu_gcc)。
Makefile中的ifeq,ifneq,ifdef
- ifeq($(ABC), XX)表示变量ABC的值与XX相同则表示真,其中格式如下
ifeq($(A), X) FLAG += -Debug endif
-
ifeq($(ABC), XX)表示变量ABC的值与XX不相同则表示真
-
ifdef 只是测试一个变量是否有值,不会对变量进行改变。如果该变量有值,则表示真;该变量为空,则表示假。
注:对于变量“name”,定义的时候为“name=”,则ifdef判断为假。但是如果有“name=”和“sum=$(name)”,则ifdef判断sum为真,如下所示,第一个返回yes,第二个返回no例1: bar = foo = $(bar) ifdef foo frobozz = yes else frobozz = no endif 例 2: foo = ifdef foo frobozz = yes else frobozz = no endif
Makefile中的CFLAGS
CFLAGS是一个变量没有具体含义,是个通用的约定,通过这个变量告诉编译器开发者所选择的编译选项。某些地方写作EXTRA_CFLAGS,案例如下
EXTRA_CFLAGS += -O0 -g3 -Wall $(D_PRINT) -c -fmessage-length=0
其中-O0表示