【Linux课程学习】make/Makefile:Linux项目自动化构建工具

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习 

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

🍉一.make/Makefile的理解:

写成Makefilemakefile都是可以的。

先来看看百度百科的解释:

1.Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。

2.整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。极大提高了效率

所以对于程序员来说,make/Makefile是很重要的。


本人的理解:

让我来解释一下就是,我们在项目中会生成很多目标文件,而且会生成很多次。如果我们不用make/Makefile,每次我们都要写依赖关系(需要的源文件,也就是要用哪个文件生成去生成新的文件),还有依赖方法(具体通过什么方法生成)。

如果我们在Makefile文件中(Makefile和makefile都可以,m可大写可小写),写好了 依赖关系和依赖方法,我们只需要写make+目标文件,就会直接生成我们需要的目标文件。如果只写make,目标文件省略,那么会生成第一个目标文件,也就是makefile文件最开始的文件。

🍉二.makefile文件的构成:

make是一条命令,makefile是一个程序。两者构成了可执行程序。

1.目标文件(target file)。

2.依赖文件(Dependent file)。

●目标文件和依赖文件构成了依赖关系 。

●目标文件在前,依赖文件在后,中间有:

写好这一套以后,我们直接保存退出 ,然后在命令行输入make test,就会根据依赖关系和依赖方法生成test文件。

发生错误时,make会直接退出。make会进行报错。

注:在依赖方法前面加上@,在使用make的时候,可以不让依赖方法回显。

例如:

makefile文件如下:

🥦不加@,就会回显依赖方法:

🥦加上@,就不会回显依赖方法。

🍉三 .更加规范便捷的用法写makefile文件:

🥥makefile文件中注释语句:

在语句前面加上#就可以注释语句

🥥首先是变量的使用:

变量的定义方法:

新名字=原文件的名字

例如:

target=test

depend=test.cpp

将上面的改完就是:

使用变量时,要使用$,可以理解为C语言的解引用。之后依赖文件和目标文件发生变动的时候,只需要在变量定义的时候改就可以了,这样比较方便。

🥥$@和$^的使用:

$@:表示所有的目标文件。

$^:表示所有的依赖文件。

如果有很多依赖文件时,我们就可以使用这个。这样在依赖方法中就不要写那么多的文件。

如下:

$@代表test

$^代表test.cpp

🍉四.对于伪文件和时间戳的理解:

伪文件:

🌽用途:

伪文件不会真正生成一个文件,伪目标文件一般用于对文件清理,安装,测试等用途。 

🌽定义方法:

.PHONY:文件名称

这样就可以定义一个伪文件。


时间戳:

🌽查看文件的时间戳 :

stat   文件名称

可以查看文件的时间戳。

每个文件都会有时间戳这个属性,一切皆文件。

依赖文件和目标文件也会有时间戳。

make有一个特点,如果目标文件的时间戳比依赖文件新,就是时间在依赖文件后面,就不会新生产目标文件,而是提示up  to data

这样的情况下,test的时间在test.cpp后面,就不会执行依赖方法。

相反伪文件不会生成真的文件,所以不会出现这种情况,可以一直执行make。

例如 :

只是到后面不会做什么事情而已。

🍉小测试:

我们可以用touch -m 指令更新时间戳,来判断是不是真的是根据时间戳来判断是否新生成目标文件。

从上面的例子我们就可以看出,在我们更新时间以后,又重新执行了g++ -o test test.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146181.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+MySQL的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步,动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而,市场上现有的动漫平台大多以国外动漫为主,对国产动漫的推广和展示存在不…

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的,默认初始容量为10。 2.添加数据时,首先需要检查元素个数是否超过数组容量,如果超过了则需要对数组进行扩容(1.5倍);插入数据时,需要将从插入点 k 开始到数…

BMC 虚拟i2c访问PCA9545(switch芯片)后面的设备,为什么找不到PCA9545?

1.说明 1.1 背景 无意中看到PCA9545(switch芯片)后面有设备,但是PCA9545设备本身是连接到物理设备i2c上的,然而扫描该物理i2c bus,却找不到该设备。此篇文章主要找一下该原因的。 1.2 参考代码 当前使用的是ast2600芯片,可参考…

java使用ByteBuffer进行多文件合并和拆分

1.背景 因为验证证书的需要,需要把证书文件和公钥给到客户,考虑到多个文件交互的不便性,所以决定将2个文件合并成一个文件交互给客户。刚开始采用字符串拼接2个文件内容,但是由于是加密文件,采用字符串形式合并后&…

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时,GLTF(GL Transmission Format)文件因其高效性和灵活性而广受欢迎。然而,随着模型复杂度的增加,GLTF文件的大小也会显著增加,这可能会对加载时间和渲染性能产生负面影响。为…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意,哈希表中的键值对,键是唯一的而值可以重复 所以有下面的结果: key中原来已经有了f1,所以再使用hse…

linux 操作系统下dhcrelay命令介绍和案例应用

linux 操作系统下dhcrelay命令介绍和案例应用 dhcrelay是一个用于DHCP(动态主机配置协议)中继的命令,主要功能是在没有本地DHCP服务器的子网中转发DHCP请求。这使得不同子网的DHCP客户端能够与位于其他子网中的DHCP服务器进行通信。 dhcrela…

基于微信小程序的购物系统+php(lw+演示+源码+运行)

基于微信小程序的购物系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的购物系统的开发全过程。通过分析基于微信小程序的购物系统管理的不足,创建了一个计算机管理基于微信小…

如何使用 Python 连接 MySQL 数据库?什么是 ORM(对象关系映射),如何使用

数据库是现代软件开发中的核心部分,而 Python 作为一种流行的编程语言,广泛应用于数据处理和分析工作。通常我们需要通过 Python 连接数据库并执行一些常见的操作,如插入、查询、更新和删除数据。在实际开发中,MySQL 是非常常用的…

LeetCode[中等] 155. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

线程知识点补充

我们之前: 主线程下来,调用了一个方法run方法,方法执行完后再继续往下走主线程。 咱们期望: 两个同时执行,交替执行。 一些核心概念说明: 一个程序写好是静态的,给他运行起来就是一个进程了…

java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统,用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…

unity3d入门教程八-飞机大战

unity3d入门教程八-飞机大战 19.2竖屏设置19.3主控脚本19.4制作子弹19.5制作飞机19.6制作怪物19.7击中目标19.8随机生成怪物19.9预制体怪物随机更换头像19.10怪物相关优化19.11游戏背景19.12游戏最终优化一、 HP显示二、怪物预制体三、分值显示四、背景音乐 19.2竖屏设置 切换到…

鸿蒙媒体开发系列08——AudioCapturer录制音频

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 1、概述 我们在鸿蒙媒体开发系列07——AVRecorder音频录制中我们了解到&#xff0c…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言: 🌟🌟本期讲解多线程的知识哟~~~,希望能帮到屏幕前的你。 🌈上期博客在这里:【后端开发】JavaEE初阶——计算机是如何工作的???-CSDN博客 🌈感兴趣的小伙…

Linux介绍;Linux安装;Linux常见错误

一,Linux简介 1.1操作系统 指人和计算机硬件沟通交流的平台。 1.2常见的操作系统 1.21 PC windows MacOS Linux 1.22 移动端 Android IOS 鸿蒙 塞班 1.3什么是Linux Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用&…

【漏洞复现】泛微OA E-Office jx2_config.ini 敏感信息泄漏漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

buucft hashcat

使用文本编辑器打开时乱码 使用010editor打开发现时xml文档 拷贝到kali,使用binwalk查看,发现时xml文档,改后缀名为ppt。打开发现有密码 Accent OFFICE Password Recovery 64位-Office密码恢复软件 v20.09 免费版 - 下载吧 试试这个Accent O…

飞腾计算模块RapidIO性能测试

1、背景介绍 飞腾计算模块采用FT2000 64核处理器,搭配Tsi721 PCIE转RapidIO芯片,实现飞腾平台下的SRIO数据通信。操作系统采用麒麟信安,内核版本4.19.90. 2、驱动加载 驱动加载部分类似之前写过的X86平台下的RapidIO驱动加载,具…

Ngnix 在windows上的简单使用

安装 下载链接: nginx: download 选择页面中 Stable version 下的windows版本直接下载解压到本地。 运行nginx: 解压到本地后,结构如图: cmd 进入到上图的根目录,运行 start nginx ,即可开启。 打开 http://localhost 进行查看,如果正常打开nginx的测试页面,则说…