本文主要介绍“如何使用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。
评论前必须登录!
注册