曲径通幽论坛

标题: make -- GNU 程序编译及维护工具 [打印本页]

作者: beyes    时间: 2011-5-17 11:07
标题: make -- GNU 程序编译及维护工具
选项说明:
-b -m :为了与其它 make 版本的兼容性,这两个选项忽略。

-B :相当于 --always-make ,强制重建所有规则的目标,不根据规则的依赖描述决定是否重建目标文件。

-C DIR :相当于  --directory=dir ,在读取Makefile之前,进入目录"DIR”,就是切换工作目录到 "DIR” 之后执行 make。存在多个 "-C” 选项时,make的最终工作目录是第一个目录的相对路径。如:"make –C / -C etc" 等价于"make –C /etc" 。一般此选项被用在递归地make调用中。

-d :make在执行过程中打印出所有的调试信息。包括:make 认为那些文件需要重建;那些文件需要比较它们的最后修改时间、比较的结果;重建目标所要执行的命令;使用的隐含规则等。使用 "-d" 选项我们可以看到make构造依赖关系链、重建目标过程的所有信息,它等效于"--debug=a" .

--debug[=FLAGS] :make执行时输出调试信息。可以使用 "OPTIONS" 控制调试信息级别。默认是 "OPTIONS=b" ,"OPTIONS" 的可能值为以下这些,首字母有效(all 和 aw等效):
a (all)
输出所有类型的调试信息,等效于 "-d" 选项。

b (basic)
输出基本调试信息。包括:那些目标过期、是否重建成功过期目标文件。

v (verbose)“basic”级别之上的输出信息。包括:解析的makefile文件名,不需要重建文件等。此选项目默认打开 "basic" 级别的调试信息。

i (implicit)
输出所有使用到的隐含规则描述。此选项目默认打开 "basic" 级别的调试信息。

j (jobs)
输出所有执行命令的子进程,包括命令执行的PID等。

m (makefile)
也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息。

-e :相当于 --environment-overrides ,使用系统环境变量的定义覆盖Makefile中的同名变量定义。

-f=file :相当于 --file= FILE 或 --makefile= FILE 。指定作为 makefile 的文件的名称。 如果不用该选项,那么make程序首先在当前目录查找名为makefile的文件,如果没有找到,它就会转而查找名为Makefile的文件。如果您在 Linux 下使用 GNU Make 的话,它会首先查找 GNUmakefile,之后再搜索 makefile 和 Makefile 。按照惯例,许多 Linux 程序员使用 Makefile,因为这样能使 Makefile 出现在目录中所有以小写字母命名的文件的前面。所以,最好不要使用GNUmakefile这一名称,因为它只适用于make程序的GNU版本。

-h :相当于 --help ,打印帮助信息。

-i :相当于 --ignore-errors,执行过程中忽略规则命令执行的错误。

-I DIR : 相当于 --include-dir=DIR ,指定被包含 makefile 文件的搜索目录。在Makefile中出现 "include" 另外一个文件时,将在"DIR" 目录下搜索。多个"-I"  指定目录时,搜索目录按照指定顺序进行。

j [JOBS] :相当于 --jobs[=JOBS] ,指定可同时执行的命令数目。在没有指定 "-j" 参数的情况下,执行的命令数目将是系统允许的最大可能数目。存在多个"-j" 参数时,尽最后一个"-j" 指定的数目(“JOBS”)有效。

-k :相当于 --keep-going ,如果使用该选项,即使make程序遇到错误也会继续向下运行;如果没有该选项,在遇到第一个错误时make程序马上就会停止,那么后面的错误情况就不得而知了。我们可以利用这个选项来查出所有有编译问题的源文件。

-l LOAD :相当于 --load-average[=LOAD] 或 --max-load[=LOAD] ,告诉make当存在其它任务在执行时,如果系统负荷超过“LOAD”(浮点数表示的),不再启动新任务。没有指定 "LOAD” 的“-I”选项将取消之前 "-I” 指定的限制。

-n :相当于 --just-print 或 --dry-run 或 --recon ,该选项使make程序进入非执行模式,也就是说将原来应该执行的命令输出,而不是执行。

-o FILE :相当于 --old-file= FILE 或 --assume-old= FILE ,指定文件 "FILE" 不需要重建,即使相对于它的依赖已经过期;同时也不重建依赖于此文件任何文件(目标文件)。注意:此参数不会通过变量 "MAKEFLAGS" 传递给子make进程。

-p :相当于 --print-data-base ,命令执行之前,打印出make读取的Makefile的所有数据(包括规则和变量的值),同时打印出make的版本信息。如果只需要打印这些数据信息(不执行命令)可以使用“make -qp”命令。查看make执行前的预设规则和变量,可使用命令“make –p -f /dev/null”。

-q :相当于 --question ,称为“询问模式”;不运行任何命令,并且无输出。make只是返回一个查询状态。返回状态为0表示没有目标需要重建,1表示存在需要重建的目标,2表示有错误发生。

-r :相当于 --no-builtin-rules ,取消所有内嵌的隐含规则,不过你可以在 Makefile 中使用模式规则来定义规则。同时选项 "-r" 会取消所有支持后追规则的隐含后缀列表,同样我们也可以在Makefile中使用 ".SUFFIXES" 定义我们自己的后缀规则。"-r" 选项不会取消 make 内嵌的隐含变量。

-R :相当于 --no-builtin-variabes ,取消make内嵌的隐含变量,不过我们可以在 Makefile 中明确定义某些变量。注意,"-R” 选项同时打开 "-r” 选项。因为没有了隐含变量,隐含规则将失去意义(隐含规则是以内嵌的隐含变量为基础的)。

-s :相当于 --silent 或 --quiet ,取消命令执行过程的打印。

-S :相当于 --no-keep-going 或 --stop ,取消 "-k" 选项。在递归的 make 过程中子 make 通过 "MAKEFLAGS" 变量继承了上层的命令行选项。我们可以在子 make 中使用 "-S” 选项取消上层传递的 "-k” 选项,或者取消系统环境变量 "MAKEFLAGS” 中的 "-k” 选项。

-t :相当于 --touch ,和 Linux 的 touch 命令实现功能相同,更新所有目标文件的时间戳到当前系统时间。防止 make 对所有过时目标文件的重建。

-v : 相当于 --version ,查看make版本信息。

-w :相当于 --print-directory ,在 make 进入一个目录读取 Makefile 之前打印工作目录。这个选项可以帮助我们调试 Makefile,跟踪定位错误。使用 "-C” 选项时默认打开这个选项。参考本节前半部分 "-C” 选项的描述。

--no-print-directory :取消 "-w” 选项。可以是用在递归的 make 调用过程中,取消 "-C” 参数的默认打开 "-w" 功能。

-W FILE : 相当于 --what-if= FILE 或 --new-file= FILE 或 --assume-file= FILE ,设定文件 "FILE” 的时间戳为当前时间,但不改变文件实际的最后修改时间。此选项主要是为实现了对所有依赖于文件 "FILE” 的目标的强制重建。

--warn-undefined-variables :在发现Makefile中存在对没有定义的变量进行引用时给出告警信息。此功能可以帮助我们调试一个存在多级套嵌变量引用的复杂Makefile。但是:我们建议在书写Makefile时尽量避免超过三级以上的变量套嵌引用。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2