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文件的基础知识,以及如果我们想使某些东西自动化的话它们怎么会很有用。
显然,您可以构建一个更大,更复杂的文件,但这只是一个新手(我包括我自己)的例子,这些新手开始了解它的工作原理。
非常有趣的文章。 一个问题……您所说的“变量”将不是函数或方法?
实际上,是的,我的朋友,感谢您的纠正。
干杯! 🙂
太好了,希望您继续努力。
好吧,一件事或另一件事, https://www.gnu.org/software/make/manual/make.html,是“目标”
规则
希望他们继续解释Linux日常运行中的这种“无所不在和基本的”事情,没有人像讲这些“优点和操作”一样充满激情地进行解释。