make - GNU使实用程序维护一组程序
概要
make [ -f makefile ] [option] ... target ...
警告
本页是GNU make的文档摘录。 它只是偶尔更新,因为GNU项目不使用nroff。 有关完整的最新文档,请参阅Texinfo源文件make.texinfo中的Info文件make.info 。
描述
make实用程序的目的是自动确定哪些大型程序需要重新编译,并发出重新编译它们的 命令 。 该手册描述了由Richard Stallman和Roland McGrath编写的make的GNU实现。 我们的例子显示C程序,因为它们是最常见的,但是您可以使用任何编译器可以使用shell命令运行的编程语言。 实际上, make并不限于程序。 您可以使用它来描述任何其他文件必须在其他文件发生更改时自动从其他文件更新的任何任务。
要准备使用make ,必须编写一个名为makefile的文件 ,它描述程序中文件之间的关系,并说明用于更新每个文件的命令。 在一个程序中,通常可执行文件是从目标文件更新的,而目标文件又是通过编译源文件来完成的。
一旦存在一个合适的makefile,每次你改变一些源文件,这个简单的shell命令:
使
足以执行所有必要的重新编译。 make程序使用makefile数据库和文件的最后修改时间来决定哪些文件需要更新。 对于每个文件,它都会发布记录在数据库中的命令。
在makefile中执行命令来更新一个或多个目标名称 ,其中名称通常是一个程序。 如果不存在-f选项, make将按照该顺序查找makefile GNUmakefile , makefile和Makefile 。
通常你应该调用你的makefile makefile或者Makefile 。 (我们推荐使用Makefile,因为它出现在目录列表的开头附近,紧邻其他重要文件,例如README 。)检查名字GNUmakefile并不推荐用于大多数makefile。 如果您有一个特定于GNU make的makefile,那么您应该使用这个名称,并且make的其他版本不会理解它。 如果makefile是“ - ”,则读取标准输入。
如果目标依赖于自上次修改目标后修改的先决条件文件,或者目标不存在,则将更新作为目标。
OPTIONS
-b
-m
为了与其他版本的make兼容,这些选项被忽略。
-C dir
在读取makefile或执行其他任何操作之前,切换到目录dir 。 如果指定了多个-C选项,则每个选项都相对于前一个选项进行解释: -C / -C等同于-C / etc。 这通常与make的递归调用一起使用 。
-d
除正常处理外还打印调试信息。 调试信息指出正在考虑重新创建哪些文件,正在比较哪些文件时间以及哪些结果,哪些文件实际需要重新映射,哪些隐式规则会被考虑并应用哪些 - 有关如何做出决定的一切都很有趣该怎么办。
-e
将来自环境的变量优先于makefile中的变量。
-f 文件
使用文件作为生成文件。
-一世
忽略为重新创建文件而执行的命令中的所有错误。
- 我是
指定目录dir以搜索包含的makefile。 如果使用几个-I选项来指定多个目录,则按指定的顺序搜索目录。 与使用make的其他标志的参数不同,使用-I标志给出的目录可能直接位于标志之后: -I dir被允许,以及-I dir。 该语法允许与C预处理器的-I标志兼容。
-j 职位
指定同时运行的作业(命令)的数量。 如果有多个-j选项,最后一个是有效的。 如果-j选项没有参数, make不会限制可以同时运行的作业数量。
-k
出错后继续尽可能多。 虽然失败的目标以及依赖它的目标不能重新制作,但这些目标的其他依赖关系可以完全相同。
-l
-l 负载
指定如果有其他作业正在运行并且平均负载至少为负载 (浮点数),则不应启动新作业(命令)。 如果没有参数,请删除以前的装载限制。
-n
打印将执行的命令,但不执行它们。
-o 文件
即使文件文件比其依赖关系旧,也不要重新制作文件文件,也不要因文件更改而重做任何文件 。 本质上,文件被视为非常古老,其规则被忽略。
-p
打印读取makefile所产生的数据库(规则和变量值); 然后照常执行或另行指定。 这也会打印由-v开关给出的版本信息(见下文)。 要打印数据库而不尝试重新制作任何文件,请使用make -p -f / dev / null。
-q
``问题模式''。 不要运行任何命令或打印任何内容; 只要返回的退出状态为零,如果指定的目标已经是最新的,否则非零。
-r
消除内置隐式规则的使用。 还要清除后缀规则的默认后缀列表。
-s
无声操作; 执行时不要打印命令。
-S
取消-k选项的效果。 除非在递归make中-k可能通过MAKEFLAGS从顶层make继承,或者如果在环境中的MAKEFLAGS中设置-k ,那么这是绝对必要的。
-t
触摸文件(将它们标记为最新,而不是真正改变它们)而不是运行它们的命令。 这被用来假装命令已经完成,以欺骗未来的make调用。
-v
打印make程序的版本以及版权,作者列表以及没有保修的通知。
-w
在其他处理之前和之后打印包含工作目录的消息。 这对追踪来自递归make命令的复杂嵌套的错误可能很有用。
-W 文件
假设目标文件刚刚被修改。 当与-n标志一起使用时,这将显示如果您要修改该文件会发生什么情况。 没有-n ,它几乎与在运行make之前在给定文件上运行触摸命令几乎相同,只是修改时间仅在make的想象中改变 。