在Linux中制作实用程序(MakeFile)

Hey folks, have you ever used IDEs? Most probably, yes. So what's your favorite one? Geany, CodeBlocks, DevC++, Eclipse, NetBeans or something else?

大家好,您曾经使用过IDE吗? 很有可能,是的。 那你最喜欢哪一个呢? Geany,CodeBlocks,DevC ++,Eclipse,NetBeans或其他?

We use IDEs for sake of ease and quick coding. What if I tell you it is making you dumber at programming because it is as it hides a lot of background details from us so this article is about it only.

我们使用IDE是为了方便快捷地进行编码。 如果我告诉您,这会使您在编程上变得笨拙,那是因为它隐藏了我们很多背景细节,因此本文仅是关于它的。

You might say ‘Hey I used the terminal on Linux and I know it's compilation done' trust me I don't mean that. You might be aware with g++ compiler or GCC (GNU C Compiler) perhaps CC (Clang's Compiler) or any other compilers (for other languages too) but it is only for one single source code and what about if you are working on a project with multiple source code and having dependencies, and need to update every time any file updates other files also need to update here make comes handy.

您可能会说:“嘿,我在Linux上使用了终端,我知道它已经完成编译了”,相信我,我不是那个意思。 您可能知道使用g ++编译器或GCC(GNU C编译器)也许使用CC(Clang的编译器)或任何其他编译器(也适用于其他语言),但这仅适用于一个源代码,如果您正在使用多个源代码且具有依赖性,并且每次文件更新时都需要更新,其他文件也需要更新,因此在这里很方便。

So what is make? It is a GNU utility to maintain groups of programs. Yes, you can use it on the terminal with the syntax:

那是什么? 它是一个GNU实用程序,用于维护程序组。 是的,您可以使用以下语法在终端上使用它:

    make  [option]... [target]...

什么牌子的? (What make does?)

This utility actually determines (automatically) which portion of the program need to recompile and issues the command to recompile them.

该实用程序实际上(自动)确定程序的哪一部分需要重新编译,并发出命令对其进行重新编译。

In this article, will discuss make's implementation using C language. Although make can be used for any other language whose compiler is compatible to run with a shell command. In fact, make can use to describe any task where some files need to update automatically from others whenever the others change.

在本文中,将讨论使用C语言进行make的实现 。 尽管make可以用于其编译器与shell命令兼容的任何其他语言。 实际上,make可以用来描述任何任务,其中只要其他文件发生更改,某些文件就需要自动从其他文件更新。

Let's have a small demonstration of make:

让我们来简单地演示一下make

Step 1: Create a C program [We created a simple program with name program1]

步骤1:创建一个C程序[我们创建了一个简单的程序,名称为program1]

Step 2: We follow command for make which is
make program1 (we used the name of the program without extension)

第2步:我们遵循make命令
make program1(我们使用的程序名称不带扩展名)

makefile 1
makefile 2
makefile 3
makefile 4

Now what will happen in this example is, make will look for program1 and when it doesn't found anywhere it will look source code with the same name. In our case, we had program1.c then make will check whether it can build from that source code that is whether necessary compilers are present or not. Now, we had C compiler and it runs the code and creates our object.

现在,在此示例中将发生的事情是,make将查找program1,并且在找不到的地方将查找具有相同名称的源代码。 在我们的例子中,我们有program1.c,然后make将检查它是否可以从该源代码进行构建,即是否存在必需的编译器。 现在,我们有了C编译器,它运行代码并创建我们的对象。

To prepare to make we need to create a file called makefile which maps the relationships among files in our program and also states the commands for updating each file. Usually, executables files are updated from object files and those object files are build by compiling the source code. After creating a makefile, each time we change some source files is sufficient for all required recompilations. The make program takes the makefile content and last modification times of the file and then decide which file For all those files which it will rebuild, it will issue the commands which are mentioned in the makefile. make execute commands present in the makefile (or sometimes can be named as Makefile). Targets are updated using make if it depends on a prerequisite files where some modification have been done since the target was last modified, or the target does not exist.

为了准备我们需要创建一个名为makefile文件,该文件的映射关系,在我们的程序文件中,也指出了命令用于更新每个文件。 通常,可执行文件是从目标文件更新的,而这些目标文件是通过编译源代码来构建的。 创建makefile后,每次更改一些源文件就足以进行所有必需的重新编译。 make程序获取makefile的内容和文件的最后修改时间,然后确定哪个文件对于将要重建的所有那些文件,它将发出makefile中提到的命令。 make执行命令(存在于makefile中)(有时可以称为Makefile)。 如果目标依赖于自上次修改目标以来已经进行了一些修改的前提文件,或者目标不存在,则使用make更新目标。

Examples:

例子:

    make

Now we will understand makefile, but before that, we need to make utility in our machine, usually make come pre-installed but in case we don't have we can download it by:

现在我们将了解makefile,但在此之前,我们需要在计算机中制作实用程序,通常会预先安装make,但是如果没有,我们可以通过以下方式下载它:

    sudo apt install build-essential

makefile 5

After installing make utility, to make sure that properly installed it in our machine we check the version of its version installed:

安装make实用程序后,为确保在我们的计算机中正确安装了该实用程序,请检查已安装版本的版本:

    make --version

makefile 6

Time to create our makefile, so what do is we create a file with any text editor (vi, vim or nano) to create a file name makefile (or Makefile, both will work).

是时候创建我们的makefile了,所以我们要做的是使用任何文本编辑器(vi,vim或nano)创建一个文件,以创建文件名makefile(或Makefile,都可以使用)。

We created our makefile:

我们创建了我们的makefile:

makefile 7

Now we will try all three options we made.

现在,我们将尝试使用所有三个选项。

First, we run make with clean and then demo.

首先,我们先运行make,然后进行演示。

You can notice the pattern that first it prints the command it is going to run then execute it.

您会注意到一种模式,它首先打印将要运行的命令,然后执行它。

Now we see the make all:

现在我们看到了全部:

makefile 8

Did you notice something?

你有注意到吗?

Yes, it produced an error as program1 doesn't exist ( we cleaned it in above using clean option). Once a command executiongives fault it stop make execution. So we create the program1 and call make all command and this time we get success.

是的,由于program1不存在,它产生了一个错误(我们在上面使用clean选项清除了它)。 一旦命令执行出现故障,它将停止执行。 因此,我们创建了program1并调用make all命令,这一次我们获得了成功。

Tips:

提示:

  1. command: make

    命令 : make

  2. is equivalent to : make all

    等效于 : 全部

While creating makefile use tabs for spacing don't mix tabs and spaces.

创建makefile时,请使用制表符分隔空格,请勿混用制表符和空格。

Recommended Articles:

推荐文章:

  • Compression techniques in Linux

    Linux中的压缩技术

  • Archiving Files Using Linux Command Line

    使用Linux命令行归档文件

  • ZIP files on command line in Linux

    Linux中命令行上的ZIP文件

翻译自: https://www.includehelp.com/linux/make-utility-makefile.aspx

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

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

相关文章

c语言单片机彩灯程序设计,用C语言实现键控彩灯系统

源程序:#include "reg51.h"#define uchar unsigned charuchar flag;uchar light,assum;void delay05s(){unsigned char i,j,k;for(i5;i>0;i--)for(j200;j>0;j--)for(k250;k>0;k--);}void delay10ms(void){unsigned char i,j;for(i20;i>0;i--)…

c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...

满意答案xvercjdl32013.10.07采纳率:47% 等级:10已帮助:272人#include #include int cmp(const void* a, const void* b){return *(int*)a > *(int*)b;}int main(){int arr[5][5];int tmp[5];int ct 0;int i,j;printf("input 25 …

智能循迹避障小车C语言程序编写思路,基于单片机的智能小车红外避障循迹系统设计与制作...

余秀玲 余秀娟摘 要:随着科技的高速发展,人们对生活质量的要求越来越高,无人驾驶汽车已经被广为研发和试用,由此智能小车的快速发展也是在情理之中。通过对基于单片机的智能小车的硬件及软件设计分析,实现红外避障循迹…

主板扩展槽图解_子板:扩展到主板

主板扩展槽图解A daughterboard is a circuit board that plugs into and extends the circuitry of the main board called motherboard. A daughterboard is connected directly to the motherboard. Unlike expansion cards, which connect with the motherboard using the …

c语言春考题目,PAT 2017年春考乙级真题(1066. 图像过滤)(C语言)

题目原文:图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。输入格式:输入在第一行给出一幅图像的分辨率&#xf…

NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作

环境: &nbsp&nbspVisual Studio 2010 一、Mindscape.NhibernateModelDesigner安装 &nbsp&nbsp在打开VS2010之后,我们能够在“工具”菜单下找到“扩展管理器,搜索:Mindscape NHibernate Model Designer 下载安装就…

树1 树的同构_检查树是否同构

树1 树的同构Problem statement: 问题陈述: Write a function to detect if two trees are isomorphic. Two trees are called isomorphic if one of them can be obtained from other by a series of flips, i.e. by swapping left and right children of a numbe…

《Android应用开发攻略》——2.2 异常处理

2.2 异常处理 Ian Darwin2.2.1 问题Java有一个精心定义的异常处理机制,但是需要花费一定的时间学习,才能高效地使用而不至于使用户或者技术支持人员感到沮丧。2.2.2 解决方案Java提供了一个Exception层次结构,正确地使用它能够带来相当大的灵…

请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇

MPGankIO 布局篇整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~我们的布局采用5.0之后的新布局控件1.CardViewCardView特别的属性如下:android:cardCornerRadius:在布局中设置…

小米净水器压力传感器_净水器中RO的完整形式是什么?

小米净水器压力传感器RO:反渗透 (RO: Reverse Osmosis) RO is an abbreviation of Reverse Osmosis. It is a course of action that aids the RO water purifier to banish unfavorable ions, dissolved solids, and TDS from the water. Reverse osmosis is the c…

即时通讯应用战争开打,到底谁能最终定义我们的交流方式?

题图:风靡亚洲的Line 北京时间4月4日消息,据科技网站TechRadar报道,对业界来说,即时通讯应用是一个巨大的市场,除了专门发力该领域的公司,专注搜索的谷歌和专注社交的Facebook最近几年也都开始深耕此类应用…

离散点自动生成等高线_有限自动机| 离散数学

离散点自动生成等高线有限状态机 (Finite state machine) A finite state machine (FSM) is similar to a finite state automation (FSA) except that the finite state machine "prints" an output using an output alphabet distinct from the input alphabet. Th…

android点击加号,Android仿微信朋友圈点击加号添加图片功能

本文为大家分享了类似微信朋友圈,点击号图片,可以加图片功能,供大家参考,具体内容如下xml:xmlns:app"http://schemas.android.com/apk/res-auto"android:layout_width"match_parent"android:layout_height&qu…

AI 创业公司 Kyndi 获850万美元融资,帮助公司预测未来

雷锋网(公众号:雷锋网)8月10日消息,据外媒报道, Kyndi 是一家总部位于帕洛阿尔托的 AI 创业公司。该公司今天宣布,已经完成了850万美元的 B 轮融资。 本轮融资的资金来源包括 PivotNorth Capital,Darling Ventures 和 …

css max-width_CSS中的max-width属性

css max-widthCSS | 最大宽度属性 (CSS | max-width property) The max-width property is used to help in setting the width of an element to the maximum. Although if the element or content is already larger than the maximum width then the height of that content…

20个编写现代CSS代码的建议

本文翻译自Danny Markov 的20-Tips-For-Writing-Modern-CSS一文。 本文归纳于笔者的Web Frontend Introduction And Best Practices:前端入门与最佳实践中CSS入门与最佳实践系列,其他的关于CSS样式指南的还有提升你的CSS姿势、Facebook里是怎样提升CSS代码质量的。本…

css 相同的css属性_CSS中的order属性

css 相同的css属性CSS | 订单属性 (CSS | order Property) Introduction: 介绍: Web development is an ever-growing field that would never find its end, therefore it is equally necessary to learn new ways to deal with the elements of the web page or …

StoreServ的ASIC架构师必须面向未来做出决断

StoreServ阵列采用特殊硬件,即一套ASIC来加速存储阵列操作,而且其每代阵列都会在这方面进行重新设计。目前的设计为第五代。 作为惠普企业业务公司研究员兼StoreServ架构师,Siamak Nazari当下主要负责第六代ASIC的设计工作。 每代ASIC设计往往…

android网页省略分页器,Android轻量级网页风格分页器

博客同步自:个人博客主页轻量级仿网页风格分页器,和RecycleView封装一起配合使用,也可单独使用,喜欢就star、fork下吧~谢谢目录功能介绍效果图如何引入简单使用依赖github地址功能介绍支持延迟加载分页支持单独分页器组件使用&…

传统存储做到极致也惊人!看宏杉科技发布的CloudSAN

传统存储阵列首先考虑的是高可靠、高性能。那么在成本上、扩展上、部署上就差。 互联网企业带来分布式存储,扩展上、部署上是优势了,但是单节点的可靠性差、数据一致性差、IO延迟大、空间浪费严重,能耗大。 这两者的问题,我想很多…