make 基本使用
阅读数:143 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
configure用于生成makefile,make命令根据makefile文件编译程序,make install 会把可执行程序安装至/usr/local/bin目录。
二、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是按GNUmakefile、makefile、Makefile的顺序寻找文件名。推荐使用Makefile这外名称,因为它在文件排序中比前靠前,而且还靠近README这些重要的文件。
当然也可以使用-f name或--file=name的方式来指定make的文件名。
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 |
-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的跟踪信息 |
-w --print-directory |
输出工作目录信息 |
--no-print-directory |
与-w功能相反 |
-W file --what-if=file --new-file=file --assume-new=file |
假设指定目标文件刚被修改 |
--warn-undefined-variables |
发现未定义的变量时产生一个warning |
四、GUN make特定变量
MAKEFILES | make读取的makefiles |
VPATH | 搜索目录,用于当前目录中未找到的文件的其它搜索目录 |
SHELL | 系统使用的默认命令解释器的名称,一般是/bin/sh。 |
MAKESHELL | 只用于MS-DOS |
MAKE | make调用时使用的名子 |
MAKE_VERSION | |
MAKE_HOST | 执行make所在的主机 |
MAKELEVEL | 递归执行make的次数 |
MAKEFLAGS | make执行时使用的配置项 |
GUNMAKEFLAGS | 只用于GNU make可识别的配置项 |
MAKECMDGOALS | 命令行执行make的目标 |
CURDIR | 当前的工作目录 |
SUFFIXES | make识别的后缀 |
LIBPATHTERNS | make搜索的库的名称和顺序 |