make 基本使用

阅读数:31 评论数:0

跳转到新版页面

分类

Linux

正文

一、makefile

makefile文件中包含显式的规则、隐式的规则、变量定义、指令和注释(注释使用#)。

makefiles的语法是基于行的,结尾没有行结束符。如果一行过长,怎么办呢?在断开的地方使用\,例如:

SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
				  -e s/sun4u/sparc64/ \
				  -e s/arm.*/arm/ -e s/sa110/arm/ \
				  -e s/s390x/s390/ -e s/parisc64/parisc/ \
				  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
				  -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
				  -e s/riscv.*/riscv/)

二、make文件名

默认,make是按GNUmakefile、makefile、Makefile的顺序寻找文件名。推荐使用Makefile这外名称,因为它在文件排序中比前靠前,而且还靠近README这些重要的文件。

当然也可以使用-f name或--file=name的方式来指定make的文件名。

三、包含其它的makefiles

include filenames...
#不包含
-include filenames...

 

四、make命令选项

1、make clean与make distclean的区别

(1)make clean仅仅是清除之前编译的可执行文件及配置文件。

(2)make distclean要清除所有生成的文件。

--always-make

强制所有目标重新执行make

-C dir

--directory=dir

在读取makefile之前移动工作目录到dir

-d

打印调试信息,等价于--debug=a

--debug[=options]

打印调试信息,可以选择级别和类型

(1)a(all)

(2)b(basic)输出out-of-date的目标和编译是否成功

(3)v(verbos)高于basic,包括处理哪些makefiles等

(4)i(implicit)

(5)j(jobs)

(6)m(makefile)

(7)n(none)

-e

--environment-overrides

指定使用的变量环境

-E string

--eval=string

把string用makefile语法解释

-f file

--file=file

--makefile=file

指定读取的makefile

-h

--help

获取make的帮助信息

-i

--ignore-errors

忽视执行make时的所有错误

-I dir

--include-dir=dir

指定执行makefile是使用的目录

-j [jobs]

--jobs[=jobs]

指定可以同时执行的recipes(jobs)的数量

-k

--keep-going

在发生错误时尽量继续执行

-l [load]

--load-average [=load]

--max-load[=load]

如果有其它recipes在执行,并且系统的负载平均值最少是指定的load值,那么新的recipes不应该开始。

-L

--check-symlink-times

在支持符号链接的系统中,检查symlink的时间戳。

-n

--just-print

--dry-run

--recon

打印要执行的recipe,但并不实际执行它。

-o file

--old-file=file

--assume-old=file

即使指定文件older than its prerequisites,也不要remake。

-O[type]

--output-sync[=type]

与--jobs同用

-p

--print-data-base

打印data base(规则和变量值)

-q

--question

不执行任何recipes,也不打印任何值,返回值如果是0,表示不需要remake,1表示需要remake,2表示发生错误。

-r

--no-builtin-rules

不使用built-in rules

-R

--no-builtin-variables

不使用built-in variables

-s

--silent

--quiet

安静模式

-S

--no-keep-going

--stop

与-k功能相反

-t

--touch

用于创建文件来替代执行recipes

--trace

显示make的跟踪信息

-v

--verstion

输出make的版本信息

-w

--print-directory

输出工作目录信息

--no-print-directory

与-w功能相反

-W file

--what-if=file

--new-file=file

--assume-new=file

假设指定目标文件刚被修改

--warn-undefined-variables

发现未定义的变量时产生一个warning

五、GUN make特定变量

(1)MAKEFILES

make读取的makefiles

(2)VPATH

搜索目录,用于当前目录中未找到的文件的其它搜索目录

(3)SHELL

系统使用的默认命令解释器的名称,一般是/bin/sh。

(4)MAKESHELL

只用于MS-DOS

(5)MAKE

make调用时使用的名子

(6)MAKE_VERSION

内置变量

(7)MAKE_HOST

内置变量,执行make所在的主机

(8)MAKELEVEL

递归执行make的次数

(9)MAKEFLAGS

make执行时使用的配置项

(10)GUNMAKEFLAGS

只用于GNU make可识别的配置项

(11)MAKECMDGOALS

命令行执行make的目标

(12)CURDIR

当前的工作目录

(13)SUFFIXES

make识别的后缀

(14).LIBPATHTERNS

make搜索的库的名称和顺序