什么是Makefile,它在Linux中如何工作?

什么是Makefile及其在Linux中的工作方式

Si 要在更新某些文件时运行或更新任务,make实用程序可以派上用场。 make实用程序需要一个文件makefile,该文件定义了一组要执行的任务。

您可能已经习惯使用make从源代码编译程序了,所以这个名称对于您中的许多人来说都是很熟悉的。 大多数开源项目使用make来编译最终的可执行二进制文件,可以使用make install进行安装。

这一次, 让我们了解这种文件在Linux中如何工作。

一个makefile文件 它基本上分为四种基本类型的语句:

  • 评论
  • 变数
  • 明确的规则。
  • 隐式规则。

显式规则告诉make哪些文件依赖于其他文件,以及编译特定文件所需的命令。

尽管隐式命令类似于显式命令,但是区别在于它们指示要执行的命令,但是make使用文件扩展名来确定要执行的命令。

在此示例中,我们将不使用最后两个, 我们仅从在终端上打印经典的“ Hello World”开始。

为此,我们将使用您想要的名称创建一个空目录。

在这种情况下 我们称之为“示例制作” 在这个 我们将创建一个包含以下内容的makefile:

#este es un comentario, todo lo que este dentro de esta línea simplemente es ignorado
esta_es_una_variable:
echo "Hola Mundo"

现在 通过在目录内键入make运行文件,输出将是:

make
echo "Hola Mundo"
Hola Mundo

如您所见,当makefile执行时,将显示命令回显“ Hello World”,然后是实际命令的输出。 我们通常不想要那个。 要在运行make时禁止显示此输出,只需在echo之前添加“ @”:

实际的例子是:

#este es un comentario, todo lo que este dentro de esta línea simplemente es ignorado
esta_es_una_variable:
@echo "Hola Mundo"

现在 我们可以继续运行makefile。 这样的输出应显示:

make
Hola Mundo

这是很基本的。 但是如您所知,makefile包含许多内容,它们指示要遵循的顺序。

我们可以向该文件添加一些简单的序列。

我们要做的是编辑文件,如下所示:

#este es un comentario, todo lo que este dentro de esta línea simplemente es ignorado
esta_es_una_variable:
@echo "Hola Mundo"
crear_un_archivo_nuevo:
@ echo "Estoy creando un archivo.txt ..."
touch  archivo.txt

重新运行makefile时, 这只会执行第一个目标。 这是因为makefile中只有第一个目标是默认目标。

按顺序执行 必须在文件中用“ all”表示它。 呼叫其他目标是“那里”的责任。

all: esta_es_una_variable crear_un_archivo_nuevo
#este es un comentario, todo lo que este dentro de esta línea simplemente es ignorado
esta_es_una_variable:
@echo "Hola Mundo"
crear_un_archivo_nuevo:
@ echo "Estoy creando un archivo.txt ..."
touch  archivo.txt

您可以再次运行make,您将在目录中看到一个名为 “ File.txt”。

同样 可以在makefile文件中执行目标,这是非常常用的。

我们将修改我们的文件,并在末尾添加以下内容:
clean:
@ echo "Voy a eliminar el archivo txt creado”
rm archivo*.txt

您可以重新运行make,它将重新创建txt文件。 如您所见,它将执行与上次相同的操作。 但是现在我们要执行makefile文件中的目标。

我们这样做:

make clean

有了它,我们可以学到一些关于make文件的基础知识,以及如果我们想使某些东西自动化的话它们怎么会很有用。

显然,您可以构建一个更大,更复杂的文件,但这只是一个新手(我包括我自己)的例子,这些新手开始了解它的工作原理。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   精氨酸0

    非常有趣的文章。 一个问题……您所说的“变量”将不是函数或方法?

    1.    大卫·纳兰霍

      实际上,是的,我的朋友,感谢您的纠正。
      干杯! 🙂

  2.   彼得

    太好了,希望您继续努力。

  3.   曼努埃尔·阿尔科塞

    好吧,一件事或另一件事, https://www.gnu.org/software/make/manual/make.html,是“目标”

  4.   曼努埃尔·阿尔科塞

    规则

  5.   SEBAS

    希望他们继续解释Linux日常运行中的这种“无所不在和基本的”事情,没有人像讲这些“优点和操作”一样充满激情地进行解释。