Skip to main content

了解Unix和Linux命令:make

#2.3 Linux 基本指令 mkdir rmdir rm (Linux 机器学习 教程教学 tutorial) (四月 2025)

#2.3 Linux 基本指令 mkdir rmdir rm (Linux 机器学习 教程教学 tutorial) (四月 2025)
Anonim

make实用程序的目的是自动确定需要重新编译大型程序的哪些部分,并发出命令以重新编译它们。该手册描述了由Richard Stallman和Roland McGrath编写的make的GNU实现。这些示例显示了C程序,因为它们是最常见的,但您可以将make与任何编译语言结合使用,其编译器可以使用shell命令运行。实际上,make并不仅限于程序。您可以使用它来描述任何一些任务,其中某些文件必须在其他文件更改时自动从其他文件更新。

注意:此页面是GNU make文档的摘录 . 它只是偶尔更新,因为GNU项目不使用nroff。有关完整的当前文档,请参阅由Texinfo源文件make.texinfo制作的信息文件make.info。

make实用程序的语法和准备

使 -F 生成文件 选项 … 目标 …

要准备使用make,您必须编写一个名为makefile的文件,该文件描述程序中文件之间的关系,并说明更新每个文件的命令。通常,可从目标文件更新可执行文件,而目标文件又通过编译源文件来完成。

一旦存在合适的makefile,每次更改一些源文件时,这个简单的shell命令 使 足以执行所有必要的重新编译。 make程序使用makefile数据库和文件的最后修改时间来决定需要更新哪些文件。对于每个文件,它会发出数据库中记录的命令。

make实用程序在makefile中执行命令以更新一个或多个目标名称,其中 名称 通常是一个程序。如果不-F 选项存在,make将查找makefileGNUmakefile, 生成文件,和Makefile文件, 以该顺序。

通常你应该调用你的makefile makefile或Makefile。 (建议使用Makefile 因为它突出显示在目录列表的开头附近,就在其他重要文件附近,例如自述。)对于大多数makefile,不建议使用第一个名称检查的GNUmakefile。如果您有一个特定于GNU make的makefile,并且其他版本的make不会理解,那么您应该使用此名称。如果makefile是 -,读取标准输入。

使 如果目标依赖于自上次修改目标以来已修改的先决条件文件,或者目标不存在,则实用程序将更新目标。

选项

-b-m 与其他版本的make兼容时,将忽略选项。

-C dir 将在读取makefile或执行任何其他操作之前更改为目录dir。如果多个-C 指定了选项,每个选项都相对于前一个解释:-C/ -C等 相当于-C /等。这通常与make的递归调用一起使用。

-d 选项将打印除正常处理之外的调试信息。调试信息说明正在考虑重建哪些文件,正在比较哪些文件时间以及结果是什么,哪些文件实际需要重新制作,哪些隐式规则被考虑以及哪些被应用 - 关于make如何决定做什么的一切都很有趣。

-e option提供从环境优先级获取的变量优先于makefile的变量。

-F 文件 选项使用 文件 作为一个makefile。

-一世 选项忽略为重制文件而执行的命令中的所有错误。

-一世 DIR 选项指定目录 DIR 搜索包含的makefile。如果好几个-一世 options用于指定多个目录,按指定的顺序搜索目录。与make的其他标志的参数不同,给出的目录-一世 旗帜可能会直接落在旗帜之后:-Idir 被允许,以及 - 我的意见 . 允许此语法与C预处理器兼容-一世 旗。

-j工作 option指定要同时运行的作业(命令)的数量。如果有多个-j 选项,最后一个是有效的。如果-j 选项没有参数, make不会限制可以同时运行的作业数量。

-k 错误后,选项会尽可能地继续;虽然失败的目标和依赖它的目标无法重新生成,但这些目标的其他依赖关系可以完全相同。

-l -l load options指定如果有其他作业正在运行,并且平均负载最小,则不应启动新作业(命令)加载 (浮点数)。没有参数,它会删除以前的加载限制。

-n 选项打印将执行的命令,但不执行它们。

-o 文件 选项不会重拍 文件 即使它比它的依赖项更旧,也不会因为更改而重制任何内容 文件 。本质上,该文件被视为非常旧,其规则被忽略。

-p 选项打印通过读取makefile生成的数据库(规则和变量值)。然后像往常一样或以其他方式指定。这也打印出由。给出的版本信息-v 开关(见下文)。要打印数据库而不尝试重新创建任何文件,请使用使 -p -f的/ dev / null的 .

-q 选项设置问题模式。不要运行任何命令或打印任何内容,如果指定的目标已经是最新的,则返回零状态,否则返回非零值。

-r 选项消除了内置隐式规则的使用。同时清除后缀规则的默认后缀列表。

-s 选项使操作无声。它不会在执行时打印命令。

-S 选项取消了效果-k 选项。除了递归make之外,这是绝对必要的 哪里-k 可以通过MAKEFLAGS从顶级make继承,或者如果你设置的话-k 在您环境中的MAKEFLAGS中。

-t 选项触摸文件(将它们标记为最新而不真正更改它们)而不是运行它们的命令。这用于假装命令已完成,以便欺骗未来的make调用。

-v 选项打印制作程序的版本加上版权,作者列表以及没有保修的通知。

-w 选项在其他处理之前和之后打印包含工作目录的消息。这可能有助于追踪复杂的递归制作中的错误 命令。

-W 文件 选项假装目标 文件 刚被修改过。与…一起使用时-n flag,这将显示如果您要修改该文件会发生什么。没有-n,它几乎与运行一个相同触摸 在运行make之前对给定文件执行命令,但修改时间仅在make的想象中更改。