返回顶部
首页 > 资讯 > 后端开发 > Python >什么是makefile(3)
  • 416
分享到

什么是makefile(3)

makefile 2023-01-31 03:01:40 416人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

继续(2)的内容: 六、另类风格的makefile 即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容

继续(2)的内容:

六、另类风格的makefile
即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容易,谁叫它提供了自动推导命令和文件的功能呢?来看看最新风格的makefile吧。
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects)
这种风格,让我们的makefile变得很简单,但我们的文件依赖关系就显得有点凌乱了。鱼和熊掌不可兼得。还看你的喜好了。我是不喜欢这种风格的,一是文件的依赖关系看不清楚,二是如果文件一多,要加入几个新的.o文件,那就理不清楚了。

七、清空目标文件的规则
每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》吗)。
一般的风格都是:
clean:
rm edit $(objects)
更为稳健的做法是:
.PHONY : clean
clean :
-rm edit $(objects)
前面说过,.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。不成文的规矩是——“clean从来都是放在文件的最后”。

上面就是一个makefile的概貌,也是makefile的基础,下面还有很多makefile的相关细节,准备好了吗?准备好了就来。
Makefile 总述
———————
一、Makefile里有什么?
Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。
1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。
2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。
3、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。
4、文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。
5、注释。Makefile中只有行注释,和UNIX的shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“\#”。

最后,还值得一提的是,在Makefile中的命令,必须要以[Tab]键开始。

二、Makefile的文件名
默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,找到了解释这个文件。在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用“GNUmakefile”,这个文件是GNU的make识别的。有另外一些make只对全小写的“makefile”文件名敏感,但是基本上来说,大多数的make都支持“makefile”和“Makefile”这两种默认文件名。当然,你可以使用别的文件名来书写Makefile,比如:“Make.linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“--file”参数,如:make -f Make.Linux或make –file Make.AIX。

三、引用其它的Makefile
在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。include的语法是:
include <filename>
filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符)在include前面可以有一些空字符,但是绝不能是[Tab]键开始。include和<filename>可以用一个或多个空格隔开。举个例子,你有这样几个Makefile:a.mk、b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了e.mk和f.mk,那么,下面的语句:
include foo.make *.mk $(bar)
等价于:
include foo.make a.mk b.mk c.mk e.mk f.mk
make命令开始时,会把找寻include所指出的其它Makefile,并把其内容安置在当前的位置。就好像C/c++的#include指令一样。如果文件都没有指定绝对路径或是相对路径的话,make会在当前目录下首先寻找,如果当前目录下没有找到,那么,make还会在下面的几个目录下找:
1、如果make执行时,有“-I”或“--include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。
2、如果目录<prefix>/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。如果你想让make不理那些无法读取的文件,而继续执行,你可以在include前加一个减号“-”。如:
-include <filename>
其表示,无论include过程中出现什么错误,都不要报错继续执行。和其它版本make兼容的相关命令是sinclude,其作用和这一个是一样的。

四、环境变量 MAKEFILES
如果你的当前环境中定义了环境变量MAKEFILES,那么,make会把这个变量中的值做一个类似于include的动作。这个变量中的值是其它的Makefile,用空格分隔。只是,它和include不同的是,从这个环境变中引入的Makefile的“目标”不会起作用,如果环境变量中定义的文件发现错误,make也会不理。但是在这里我还是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使用make时,所有的Makefile都会受到它的影响,这绝不是你想看到的。在这里提这个事,只是为了告诉大家,也许有时候你的Makefile出现了怪事,那么你可以看看当前环境中有没有定义这个变量。

--结束END--

本文标题: 什么是makefile(3)

本文链接: https://lsjlt.com/news/187430.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 什么是makefile(3)
    继续(2)的内容: 六、另类风格的makefile 即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容...
    99+
    2023-01-31
    makefile
  • Makefile入门(3)
    版权所有,转载请注明:本文出自学与思linux编程网 接着Makefile入门(2)继续来学习Makefile 在前面的例子中,Makefile中的每个目标体都是一个文件,但事实上我们在看别人写得比较正规的Makefile时,我们会发现有...
    99+
    2023-01-31
    入门 Makefile
  • linux中的makefile是什么
    makefile是一个文件,用于指导编译器执行源代码文件的编译和链接过程。它是GNU make工具的配置文件,用来描述源代码文件之间...
    99+
    2023-08-22
    Linux
  • Redis中Makefile文件是什么
    这篇文章给大家分享的是有关Redis中Makefile文件是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、前言这里使用的源码版本是redis-6.2.1的。2、Makef...
    99+
    2024-04-02
  • linux中makefile指的是什么
    小编给大家分享一下linux中makefile指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在linux中,makefile是一个工程文件的编译规则,描...
    99+
    2023-06-21
  • cmake和makefile区别是什么
    CMake和Makefile都是构建和管理C/C++项目的工具,但是它们有一些重要的区别。Makefile是一种脚本文件,用于定义项...
    99+
    2023-08-16
    cmake makefile
  • makefile执行的方法是什么
    要执行Makefile,可以使用以下方法:1. 在命令行中使用`make`命令:在Makefile所在的目录下打开命令行,输入`ma...
    99+
    2023-09-12
    makefile
  • linux中makefile的作用是什么
    makefile是一个用于自动化编译和构建源代码的脚本文件。它指定了源代码文件之间的依赖关系以及如何编译和链接这些文件,从而帮助开发...
    99+
    2023-09-12
    makefile linux
  • makefile的语法结构是什么
    Makefile的语法结构主要包括以下几个部分:1. 目标(Target):Makefile中的目标指定了要生成的文件或者执行的动作...
    99+
    2023-09-12
    makefile
  • Makefile及其工作原理是什么
    这篇文章给大家介绍Makefile及其工作原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。当你需要在一些源文件改变后运行或更新一个任务时,通常会用到 make 工具。make 工具...
    99+
    2023-06-28
  • Linux系统中makefile的原理是什么
    这篇文章主要为大家分析了Linux系统中makefile的原理是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统中makefile的原理是什...
    99+
    2023-06-28
  • makefile文件编写的方法是什么
    编写Makefile文件有以下几个步骤:1. 确定目标文件:Makefile文件中首先需要确定要生成的目标文件(可执行文件、库文件等...
    99+
    2023-09-12
    makefile
  • Linux里Makefile是什么?它是如何工作的?
    用这个方便的工具来更有效的运行和编译你的程序 makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接-----但是不是所有的文件都需要重新编译,makefile能够纪录文件...
    99+
    2022-06-04
    linux makefile是什么 linux makefile是如何工作的
  • linux make命令与Makefile的区别是什么
    这篇文章主要讲解了“linux make命令与Makefile的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux make命令与Makefile的区别是什么”吧!Make命...
    99+
    2023-06-17
  • makefile静态库连接的方法是什么
    在Makefile中,连接静态库的方法是使用`-l`标志指定要连接的静态库的名称,然后使用`-L`标志指定静态库文件所在的目录。以下...
    99+
    2023-09-08
    makefile
  • Sublime Text 3是什么工具
    这篇文章主要介绍了Sublime Text 3是什么工具,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Sublime Text 很赞的代...
    99+
    2024-04-02
  • Vue 3升级方法是什么
    这篇文章主要讲解了“Vue 3升级方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue 3升级方法是什么”吧!Vue 3的发布指日可待,我们可以期...
    99+
    2024-04-02
  • makefile怎么使用
    这篇文章主要讲解了“makefile怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“makefile怎么使用”吧!概述什么是makefile?或许很多Winodws的程序员都不知道这个...
    99+
    2023-06-22
  • Linux Makefile怎么写
    这篇文章主要介绍“Linux Makefile怎么写”,在日常操作中,相信很多人在Linux Makefile怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux Makefile怎么写”的疑惑有所...
    99+
    2023-06-17
  • mysql注释3种写法是什么
    mysql注释3种写法是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql的注释有3种,分别为:1、使用“#注释...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作