本文主要介绍“如何使用Linux自动化构建工具make和makefile”。在日常操作中,相信很多人对如何使用Linux自动化构建工具make和Makefile存在疑惑。主机频道查阅了各类资料,整理了简单易用的操作方法,希望能帮助大家解决“如何使用Linux自动化构建工具Make和Makefile”的疑惑!接下来,请跟随主机频道一起学习吧!
首先,项目中make和makefile的功能不计算源文件,源文件根据其类型、功能和模块放在几个目录中。Makefile定义了一系列规则来指定哪些文件需要首先编译,哪些文件需要稍后编译,哪些文件需要重新编译,甚至更复杂的函数操作。
所以,makefile的好处是&;mdash& ampmdash“自动编译”,一次编写只需要一个make命令,整个项目自动编译和翻译,大大提高了软件开发的效率。
Make是一个命令工具,它是解释makefile中的指令的命令工具。一般来说,大多数IDE都有这个命令,比如Delphi的make,Visual C++的nmake,Linux下的GNU的make。可见,makefile已经成为工程中的一种编译方法。Make是命令,makefile是文件,两者配合使用可以完成项目的自动构建。
二、make和Makefile的使用在了解依赖关系和依赖方法之前,我们先用C语言写一个小程序。
我们创建了一个make.c文件并编写了一个hello make代码。
然后让我们创建另一个Makefile(Makefile是可以的,但不推荐)。
然后我们编辑Makefile并编写以下代码:
然后我们保存并退出。
然后我们可以执行make命令。如果提示make不存在,这是因为它尚未安装,您可以切换到root身份安装。安装代码:yum install make或sudo install make。
正常执行make后,将出现以下显示。
然后我们将查看当前目录中的文件。
我们可以找到一个可执行程序。那我们试着一起跑步吧。/制作。
我们会发现这个可执行程序的输出使得。
这是我们的自动化构建工具,只需要在Makefile中进行配置。以后直接输入make编译代码。然后让我们再次尝试输入make。
提醒我们make程序是最新的。也就是说,如果你没有修改或更新程序。那么它不会为你编译,因为你的程序没有移动。为什么要编译它?
然后让我们回来分析此时用Makefile编写的代码。
首先,我们把它分成三部分。
制造
make.c
gcc制造。c -o制造-标准=c99
三者之间的关系是make依赖于make.c它们都是依赖的,而gcc make.c -o make -std=c99是make依赖于make.c的方法,称为依赖方法。
什么是依赖和依赖方法?
举个例子。
月底了,你的生活费没了。这时,你打电话给你父亲,对他说:“爸爸,月底了。我没有钱。"。这时候你爸爸就知道了,会给你生活费。在这里,你和你父亲是父子,所以你依赖你父亲,你们之间有一种依赖关系。而你父亲给你生活费,是你依靠父亲的一种方式,所以这就是依靠法。如果你这时候打电话给室友的父亲要生活费,他会直接让你走。因为你根本不构成依赖,没有依赖就没有依赖方法。
所以我的程序是一样的。Make是一个生成的可执行程序。并且它依赖于make.c,因为它是从make.c编译而来的,依赖方法是执行命令gcc make.c -o make -std=c99。
依赖性原则
Make将在当前目录中找到一个名为“makefile”或“Makefile”的文件。
如果找到了,它将找到文件中的第一个目标文件。在上面的示例中,它将找到文件“hello”并将该文件作为最终目标文件。
如果hello文件不存在,或者hello所依赖的后来的test.o文件的文件修改时间比测试文件的修改时间新(可以通过触摸来测试),那么他将执行后来定义的命令来生成测试文件。
如果测试所依赖的test.o文件不存在,那么make将在当前文件中查找目标test.o文件的依赖关系,如果找到了,则根据哪个规则生成test.o文件。(这有点像堆叠过程。)
当然,你的C文件和H文件是存在的,所以make会生成一个test.o文件,然后使用test.o文件来声明make的最终任务,也就是执行文件测试。
这是整个make的依赖关系,make将逐层查找文件的依赖关系,直到最终编译出第一个目标文档。
在搜索过程中,如果出现错误,例如找不到最后一个依赖文件,那么make将直接退出并报告错误,但make只是忽略已定义命令的错误或未成功的编译。
Make只关心文件的依赖关系,也就是说,如果在我找到依赖关系后冒号后面的文件仍然不存在,那么对不起,我不会工作。
清理当我们编写代码时,我们经常需要重复编译和执行代码。
在下一次重新编译之前,您需要清理上次生成的可执行程序。但是在清理时,您可能会清理错误并意外删除源文件,这又会导致问题。
那么我们有什么办法可以解决它吗?答案当然是。
让我们继续编辑Makefile。
我们在原来的基础上增加了。
。假的:干净
清洁:
Rm -f这么搞有什么作用。假的?
PHONY是伪目标,伪目标总是被执行。Clean是自定义的make指令,其使用方法为make clean。
那么让我们试试这个指令。
我们可以看到它已经被清理了,那么为什么总是执行假目标呢?让我们多次执行它。
我们总是可以执行它,那么我们执行make多少次呢?
我们会发现make不能执行一次,因为它不是由修饰的。假的。那我就用。假的再试一次。
然后我们保存并退出,并多次执行make。
我们可以看到它已经执行了多次。但我认为没有必要,因为文件没有被修改。重新编译没有意义,所以添加。不建议使用PHONY进行自动编译。
我们保存了出口并多次执行make。
我们可以看到它已经执行了多次。但我认为没有必要,因为文件没有被修改。重新编译没有意义,所以添加。不建议使用PHONY进行自动编译。
评论前必须登录!
注册