make、Makefile项目自动化构建工具

news2024/12/23 1:14:00
环境:centos7.6,腾讯云服务器
Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 🌹

前言

自动化构建工具是干什么的呢? 主要是为了让我们对指令进行一些设置,就比如说,假如一个项目里有很多个源文件,这些源文件哪些需要先编译,哪些又需要同时进行编译,等等,如果这种情况下我们输入一条指令一条指令的进行编译,效率无疑会慢很多。而 自动化构建工具,只需要我们在设置好指令后,输入特定的指令,就会实现自动编译,会极大的提高开发效率。

了解完背景,我们来谈一谈make与Makefile

make与Makefile

make是一个指令,Makefile则是一个文件,是由我们用户自己创建,当然也可以写成 makefile而make指令的使用,则需要我们在Makefile文件中将任务进行编写。那么如何在Makefile文件中编写任务呢?

Makefile的使用

我们任务的编写,主要依靠两个东西,一个为依赖关系,一个为依赖方法

依赖关系

这里简单举个例子,假如我想要对一个test.c源文件进行编译,最终生成一个mytest的可执行程序,那么我们就可以说mytest与test.c互为依赖关系。mytest的生成需要依赖test.c这个源文件。两者之间用冒号:进行连接。(我们的依赖关系可以为n个,n>=0

依赖方法

依赖方法就是这个mytest是如何从test.c转变过来的,如下图:

编写完成后,我们只需要输入make mytest这条指令,就会实现自动编译。

这里有一点需要注意,就是当这个自动化任务执行完后,假如这个文件的相关属性没有发生改变(比如说对内容进行修改等),那么我们再次执行自动化任务则会报错。

关于make

我们在上面演示了make mytest 实现自动编译,但是我们发现,即使我们输入make这个指令,也依然可以实现自动编译,这是为什么呢?

因为make默认执行第一组任务,我们把依赖关系+依赖方法两者看成一个组,而make命令只会执行第一组的自动化任务。(注意,必须是依赖关系+依赖方法才能够成一个完整的自动化构建任务)

当然,一组任务里的依赖方法也可以不仅仅只有一个。

.PHONY

我们上面已经说了,假如文件最近的属性没有发生改变(这里主要是指文件的最近修改时间),我们再次执行make指令,会发生报错,我们的解决方法是我们打开这个文件,不做修改再保存并退出来,就可以再次使用make指令,这是因为文件的最近修改时间属性被我们更新了。那么有没有别的方法呢?
有的,就是利用 .PHONY,.PHONY是Makefile中的一个关键字: 对某对象生成伪目标,它的作用 就是可以使我们在不对文件的属性进行修改的情况下,任意使用make指令。

使用方法

用起来也很简单,在任务的上方用.PHONY对我们的文件进行修饰一下即可,如下:

实战练习:多文件的同时编译

是不是会方便很多,假如项目特别多的话,我们只需要按照要求,将任务写好,然后便可以实现自动化构建,会大大增加效率。


end.

生活原本沉闷,但跑起来就会有风!🌹

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

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

相关文章

Web3的“陨落”,西下与东升

文/尹宁出品/陀螺研究院极富传奇色彩的Web3似乎正在陨落。去年的Web3,在人声沸腾中讲着下一代互联网摄人心魄的故事,传统资本大刀阔斧般迈入,大厂青年以自由为名掘金,Web3一度成为资本造神新概念。根据Messari 统计,2022 年Web3 V…

如何开发微信小程序呢

也许很多人对小程序,H5程序,Vue,网页程序,PC端程序认识比较模糊,因为这些跨度非常的大,很少人会一次性全部接触,甚至只是听说过,并不了解其中的关系,下面我来厘清他们的关…

传闻腾讯引进Quest 2?我觉得可行性很低

根据36kr最新消息称,腾讯XR团队解散后,确定不碰XR硬件领域,但并未完全放弃XR规划,将转变思路和玩法,业内消息称腾讯计划引进Meta旗下Quest 2 VR一体机。消息称,该计划在2022年11月份XR部门负责人沈黎走后便…

C++ 智能指针的原理:auto_ptr、unique_ptr、shared_ptr、weak_ptr

目录一、理解智能指针1.普通指针的使用二、智能指针1.auto_ptr2.unique_ptr3.shared_ptr(1)了解shared_ptr(2)shared_ptr的缺陷4.weak_ptr本文代码在win10的vs2019中通过编译。 一、理解智能指针 1.普通指针的使用 如果程序需要…

2.22.1、死锁的概念

1、死锁的概念 1.1、什么是死锁 我等待你,你等待他,他等待她,她等待我…这世界每个人都爱别人… 我们从资源占有的角度来分析,这段关系为什么看起来那么纠结… 在并发环境下,各进程因竞争资源而造成的一种互相等待对方…

ChatGPT入门案例|张量流商务智能客服

本篇介绍了序列-序列机制和张量流的基本概念,基于中文语料库说明基于循环神经网络的语言翻译的实战应用。 01、序列-序列机制 序列-序列机制概述 序列-序列(Sequence To Sequence,Seq2Seq)是一个编码器-解码器 (Encoder-Decoder Mechanism)结构的神经网络,输入是序列(…

【C#个人错题笔记】

观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…

17个优秀WordPress LMS在线教育平台主题

为您的WordPress在线教育平台主题网站选择在线课程主题是您在建立在线教育业务时做出的最重要的决定之一。正确的主题不仅决定了您网站的外观和感觉,还决定了用户体验。这在构建在线课程平台时变得更加重要,因为您的访问者将是您的学生,他们会…

nodejs基于vue疫情期间网课管理系统

随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于疫情网课管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了疫情网课管理系统,它彻底改变了过去传统…

内网渗透(四十四)之横向移动篇-DCOM远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

波次分拣系统

一、系统架构: v1.2基站软件管理系统仓库标签v1.4仓库标签二、系统简介: 标签系统主要由标签服务器,基站,电子标签前三部分组成,操作界面借助于京东仓库已有的作业电脑来实现,标签服务器与WMS进行数据对接。…

罗技LogitechFlow技术--惊艳的多电脑切换体验

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。所以可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。…

mysql 索引原理和使用

一、索引是什么? 1.1. 索引是什么 当一张表有 500 万条数据,在没有索引的 name 字段上执行一个查询: select * from user_innodb where name ‘jim’; 如果 name 字段上面有索引呢? ALTER TABLE user_innodb DROP INDEX idx_n…

快学会这个技能-.NET API拦截技法

大家好,我是沙漠尽头的狼。 本文先抛出以下问题,请在文中寻找答案,可在评论区回答: 什么是API拦截?一个方法被很多地方调用,怎么在不修改这个方法源码情况下,记录这个方法调用的前后时间&…

Java零基础入门到精通(持续更新中)

打开CMD命令窗口 WINR输入cmd 常用cmd命令代码 切换磁盘 E: 回车即可切换到e盘查看当前路径下的所有内容 dir进入目录 cd test回退到上一级目录 cd..进入多级目录 cd test\index\aaa回退到磁盘目录 cd \清屏 cls关闭命令行窗口 exit小例子:使用命令行窗口…

细粒度视觉分析综述TPAMI2021

细粒度图像分析(FGIA,Fine-grained image analysis)是计算机视觉中一个长期存在的基本问题,并支撑着一系列不同的现实应用。FGIA的任务目标是分析从属类别(subordinate categories)的视觉对象,例…

【Azure 架构师学习笔记】-Azure Data Factory (1)-调度入门

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 前言 在开发好一个ADF pipeline(功能)之后,需要将其按需要运行起来,这个称之为调度。下图是一个简单的ADF 运作图, 按照需要的顺序&am…

uniapp 原生安卓开发插件(module),以及android环境本地调试(二)

uniapp 原生安卓开发插件(module),以及android环境本地调试(一) 1、前景 承接上一篇文章,由于uniapp每天只有限定的打包次数,所以每次插件调试都打包成为基座,这个不太方便&#x…

java 集合常见面试(一)

集合概述 java集合预览 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有…

预告|第四届OpenI/O启智开发者大会NLP大模型论坛强势来袭!

最近,ChatGPT刷爆了所有人的朋友圈。它不仅能够与人类进行日常自然的聊天,还能胜任如写论文、编代码等诸多较为复杂的语言工作。ChatGPT 爆火的背后,是NLP(自然语言处理)技术的飞速革新。在过去的十年里,人工神经网络计算的加入、…