返回顶部
首页 > 资讯 > 操作系统 >Linux下Makefile怎么用
  • 538
分享到

Linux下Makefile怎么用

2023-06-22 01:06:08 538人浏览 独家记忆
摘要

这篇文章主要为大家展示了“linux下Makefile怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下Makefile怎么用”这篇文章吧。Makefile一个工程文件中的源文件可

这篇文章主要为大家展示了“linux下Makefile怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下Makefile怎么用”这篇文章吧。

Makefile

一个工程文件中的源文件可能有很多,并且不同的功能、模块等都放在不同的目录中,常规的编译已经不能高效化的处理这样的问题,而Makefile就是为解决这一问题而来。

Makefile一旦写好,只需一个make指令,即可完成Makefile文件中所编写的所有指令,从而编译整个工程文件,极大的提高了效率

make是一个命令工具,用来解释Makefile中的命令。

Makefile文件命名和规则

文件命名

采用makefile或Makefile都可。

Makefile规则

Makefile中的命令规则如下:

xxx(目标文件):xxx(依赖文件)
制表符)命令(shell命令)
其中,目标文件即最终要生成的文件(伪目标除外),依赖文件即生成目标文件所需的文件,命令即shell命令。

注意,命令前必须有一个tab缩进。

例如:

#Makefileapp: a.c b.c #目标:依赖GCc a.c b.c -o app #注意这行最开始的缩进

make以上这个Makefile后就会将目录下的a.cb.c编译为目标文件app

Makefile的工作原理

Makefile中的命令在执行前,会检查是否存在所需的依赖文件

如果存在:执行命令

如果不存在:向下检查其他规则,是否存在其他规则生成当前规则所需要的依赖,如果有,则执行该规则中的命令。

例如:

#Makefileapp: a.o b.ogcc a.o b.o -o appa.o: a.cgcc -c a.c -o a.ob.o: b.cgcc -c b.c -o b.o

在上方这个Makefile中,当执行到app规则时,会发现所需的依赖文件a.o与b.o都不存在于当前目录,所以会向下寻找是否有其他规则生成此文件,当寻找到a.o规则时,发现其是所需的文件,就执行gcc -c a.c -o a.o,b.o同理。

Makefile在执行规则中的命令时,会比较目标文件和依赖文件的修改时间
如果依赖文件晚于目标文件修改时间,即依赖文件在上一次生成目标后进行过修改,则会重新生成目标文件。
如果依赖文件早于目标文件修改时间,即依赖文件在上一次生成目标后没进行修改,则不会执行相应的命令。
例如,你对一个Makefile使用两次make,第二次会提示make:"app"已是最新

利用这个特性,在加上我们将依赖与目标分级生成,即上方第二个Makefile,这样当我们仅修改其中的a.c文件,再一次make只会执行a.o规则与app规则,b.o规则因为b.c未修改而不执行,这样可以大大减少资源浪费。

Makefile变量

以上虽然可以减少编译代码的重复量,但是如果一个工程中有1000个.c .h文件,我们编写一个Makefile就会浪费大量时 间。因此,我们要采用一些变量来提高效率。

变量的获取
我们使用 $(变量名) 来使用变量。

自定义变量
我们使用 变量名 = 变量值var = hello来自定义我们所需的变量。
例如上方第一个Makefile就可改写为:

#Makefilersc = a.c b.capp: $(rsc) #目标:依赖gcc $(rsc) -o app #注意这行最开始的缩进

预定义的变量
有部分变量是系统预定义的,我们可以直接使用。
AR:归档维护程序的名称,默认值为ar
CC:C编译器的名称,默认值为cc
CXX:c++编译器的名称,默认值为g++
$@:目标的完整名称
$<:第一个依赖文件的名称
$^:所有依赖文件的名称

为了方便理解接下来的例子,我们简单讲解一下Makefile中的模式匹配。
%.o:%.c 中,%是 通配符,匹配一个字符串,而两个%则匹配同一个字符串
例如上方第二个Makefile可改写为:

#Makefilercs = a.o b.oapp: $(rcs)$(CC) $(rcs) -o $@%.o: %.c #上方规则会执行两次此规则$(CC) -c $< -o $@

Makefile函数

我们可以看到,上面这个Makefile已经相对简单了,但是,还是没有解决工程中文件很多的情况,rcs的获取还是要我们输入每个需要编译的文件,那么,就要采用函数来替我们去写入这些依赖文件。

$(wildcard PATTERN. . .)
这个函数的功能是获取指定目录下指定类型的文件。
其中参数PATTERN是某个目录下某种类型的文件,多个目录多个类型可用空格分隔。
返回值是一个若干个文件的文件列表,文件名用空格隔开。

例如:

$(wildcard ./*.c) 返回当前目录下的所有以c为后缀的文件。

$(patsubst pattern, replacement, text)
这个函数的功能是查找text中的单词是否符合模式pattern,如果符合,则用replacement替换。
pattern可以包括通配符 % 。如果replacement中也包含 % ,那么replacement中的 % 将和 pattern中的 % 保持一致。
返回值为替换后的字符串。

例如:

$(patsubst %.c, %.o, a.c, b.c) 返回a.o, b.o。

这样,我们上面那个例子就可以改写为:

#Makefilercs = $(wildcard ./*.c)objs = (patsubst %.c, %.o, $(src))app: $(objs)$(CC) $(objs) -o $@%.o: %.c #上方规则会执行两次此规则$(CC) -c $< -o $@

Makefile clean规则

在我们执行完make指令后,会发现当前目录下多出了很多以o为后缀的文件,但是我们仅需要最终的目标文件app,其他的都是多余的,我们该如何处理。clean规则就会帮助我们处理他们。

clean

我们只用将clean规则添加到Makefile的最后,即可在每次编译完成后执行clean规则中的命令。如:

#Makefilercs = $(wildcard ./*.c)objs = (patsubst %.c, %.o, $(src))app: $(objs)$(CC) $(objs) -o $@%.o: %.c #上方规则会执行两次此规则$(CC) -c $< -o $@clean:rm $(objs) -f #rm指令删除 -f迭代删除

但是你会发现当前目录下多出了一个clean目标文件,依旧会采用Makefile的策略,对比修改时间,导致我们时常及时执行了clean,还是无法清除文件,那么,我们就需要接下来这个操作。

我们将clean定义为伪目标,即 .PHONY:clean 那么它就不会生成目标文件,少了对比,那么每次都会执行。

例如:

#Makefilercs = $(wildcard ./*.c)objs = (patsubst %.c, %.o, $(src))app: $(objs)$(CC) $(objs) -o $@%.o: %.c #上方规则会执行两次此规则$(CC) -c $< -o $@.PHONY: clean #伪目标clean:rm $(objs) -f #rm指令删除 -f迭代删除

以上是“Linux下Makefile怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: Linux下Makefile怎么用

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

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

猜你喜欢
  • Linux下Makefile怎么用
    这篇文章主要为大家展示了“Linux下Makefile怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下Makefile怎么用”这篇文章吧。Makefile一个工程文件中的源文件可...
    99+
    2023-06-22
  • Linux下怎么生成Makefile
    这篇文章主要讲解了“Linux下怎么生成Makefile”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下怎么生成Makefile”吧!一、Makefile介绍Makefile是用于...
    99+
    2023-06-16
  • linux下makefile教程
    在Linux下,Makefile是一个用来管理源代码的工具,可以自动化编译和链接过程。它是由一系列规则组成的脚本,每个规则描述了源代...
    99+
    2023-09-13
    linux
  • Linux中的Makefile怎么用
    这篇文章主要讲解了“Linux中的Makefile怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中的Makefile怎么用”吧!简而言之makefile的作用就是“自动编译”...
    99+
    2023-06-28
  • Linux Makefile怎么写
    这篇文章主要介绍“Linux Makefile怎么写”,在日常操作中,相信很多人在Linux Makefile怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux Makefile怎么写”的疑惑有所...
    99+
    2023-06-17
  • Linux系统的Makefile怎么用
    这篇文章给大家分享的是有关Linux系统的Makefile怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Makefile就是在执行make命令的时候指定编译和链接的规则,包括源代码文件之间的链接关系、依赖关...
    99+
    2023-06-28
  • linux中的makefile怎么使用
    在Linux中,Makefile是一种用来自动化编译和链接程序的工具。它可以根据程序的依赖关系来自动判断需要重新编译的文件,并生成可...
    99+
    2023-08-23
    linux makefile
  • Linux系统中怎么使用Makefile
    本篇内容介绍了“Linux系统中怎么使用Makefile”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Makefile简介使用GNU M...
    99+
    2023-06-28
  • Linux下Makefile的编写与使用详解
    目录MakefileMakefile文件命名和规则Makefile的工作原理Makefile变量Makefile函数Makefile clean规则Makefile 一个工程文件中的源文件可能有很多,并且不同的功能、模块...
    99+
    2022-06-04
    Linux下Makefile编写介绍 Linux系统Makefile使用介绍
  • 怎么在Linux 中使用makefile命令
    这篇文章将为大家详细讲解有关怎么在Linux 中使用makefile命令,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。下面以\build\core\product.mk下面的内容为例介绍:&...
    99+
    2023-06-09
  • Linux makefile问题怎么解决
    这篇文章主要讲解了“Linux makefile问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux makefile问题怎么解决”吧!将各个模块的关系写进makefile,...
    99+
    2023-06-17
  • linux怎么新建makefile文件
    在Linux系统中,使用文本编辑器(如vi、nano等)可以新建makefile文件。以下是一种常见的方法:1. 打开终端。2. 进...
    99+
    2023-09-17
    linux
  • linux怎么运行makefile文件
    在Linux系统中,可以通过以下命令运行Makefile文件:1. 打开终端。2. 导航到包含Makefile文件的目录。可以使用`...
    99+
    2023-09-12
    makefile linux
  • makefile怎么使用
    这篇文章主要讲解了“makefile怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“makefile怎么使用”吧!概述什么是makefile?或许很多Winodws的程序员都不知道这个...
    99+
    2023-06-22
  • linux中怎么使用make指定makefile文件
    在Linux中,可以使用`make -f`命令来指定使用的Makefile文件。下面是具体的步骤:1. 打开终端。2. 进入包含Ma...
    99+
    2023-09-22
    linux
  • linux中makefile的作用是什么
    makefile是一个用于自动化编译和构建源代码的脚本文件。它指定了源代码文件之间的依赖关系以及如何编译和链接这些文件,从而帮助开发...
    99+
    2023-09-12
    makefile linux
  • Linux下使用autoconf和automake生成Makefile原理详解
    作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就...
    99+
    2022-06-03
    autoconf automake Linux make Makefile 编译
  • linux中的makefile是什么
    makefile是一个文件,用于指导编译器执行源代码文件的编译和链接过程。它是GNU make工具的配置文件,用来描述源代码文件之间...
    99+
    2023-08-22
    Linux
  • Linux自动化构建工具Makefile与make怎么用
    这篇文章主要介绍“Linux自动化构建工具Makefile与make怎么用”,在日常操作中,相信很多人在Linux自动化构建工具Makefile与make怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”L...
    99+
    2023-06-28
  • linux中makefile指的是什么
    小编给大家分享一下linux中makefile指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在linux中,makefile是一个工程文件的编译规则,描...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作