linux的make和makefile

一.什么是make和makefile

makefile作用:

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
 

make作用:

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法
 

注意点:

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
 

下面是我简单写的一个makefile文件:

通过该文件就可以实现一些便捷的命令工具。

二.make和makefile的使用与介绍

我们先试用前面的makefile中指令,再详细讲解makefile的内部知识!

1.直接make就是我们的gcc指令:

2.make+clean是我们的第二个清理指令:

现在我们再来学习内部知识:

图中第一行:

mytest1是生成的目标文件

test1.c是依赖文件列表

注意:可以多个,也可以为空

第二行:

该行是命令行,表示依赖方法,可以写多行

第三行:

表示对应的clean总是执行
所以我们可以得出:

.PHONY:XXX        表示为对应的XXX总是执行,不会出现限制

补充知识:

makefile对最新生成的内容不会再次执行!!!

例如下图:

这也是.PHONY的作用之处。

三.make和makefile的深入学习

1.替换

我们在写文件名的时候可能会觉得麻烦,所以我们可以认识以下两种替换来帮助我们便捷使用:

$---表示要执行操作符

@:表示目标文件

^:表示依赖文件列表

当我们将makefile做出以下修改时,也可以执行命令行,且执行时会自动将符号转换为文件

如下:

除了用符号来改写外,我们还可以用变量来改写:

该操作也是可以的,注意加括号即可!!!

我们再来联系我们编译和链接等操作来使用特殊的makefile:

看图:

我们可以分开进行编译链接等操作,最后得出结果

形成不同所需文件:

注意点:

如果你仔细观察会发现我们写的顺序是不符合从上到下的过程的,但是却可以执行,这是因为其可以自动推导,即自动查找:如现在对test1.o操作却没该文件,就会去后面找在返回来操作,类似递归,但是我们的第一行不能改变,其他顺序可变!!!

补充:

如果你不想每次都看执行的命令是什么,可以在前面加@

例如:

这样就不会显示执行的操作内容了。

这就是这部分的内容了,感谢大家的阅读!!!

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

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

相关文章

【python之美】减少人工成本之批量修改TXT文件名称_2

批量修改文件名称 怎么批量创建txt文件,看上期特产 源文件如下: 批量修改代码 import ospath "C:\\Users\\Administrator\\Desktop\\text\\" file_names os.listdir(path) print(file_names)i 1 for file_name in file_names:name fil…

VueCLI核心知识4:动画效果、过渡效果

1 动画效果 【代码】 <template><div><button click"isShow !isShow">显示/隐藏</button><!-- <transition name"xxx" :appear"true"> 可以指定name属性&#xff0c;也可以不指定&#xff0c;name属性在有…

数据分析 | 手敲皮尔逊相关系数计算代码 | Python

import random random.seed(42) import numpy as np计算均值 def mean(x):return sum(x) / len(x)计算偏差 def derta(x):x_bar mean(x)result [x_i - x_bar for x_i in x]return result计算协方差 def covariance(a, b):dot_list [a_i * b_i for a_i, b_i in zip(derta(a),…

Codeforces Round 926 (Div. 2)(A~D)

文章目录 ABCD A 输出最大值减最小值&#xff0c;或者排序算一下答案 #include <bits/stdc.h> #define int long long #define rep(i,a,b) for(int i (a); i < (b); i) #define fep(i,a,b) for(int i (a); i > (b); --i) #define pii pair<int, int> #d…

拿捏单链表

目录 引言 一&#xff1a;链表的定义 二&#xff1a;单链表的定义 三&#xff1a;单链表的增删查改 1.单链表增删查改及遍历的声明 注&#xff1a;在测试中创建指向头结点的指针plist 2.二级指针应用的说明 3.单链表的遍历 4.创建节点 5.单链表的插入 (1)头插 …

抖音私信自动回复工具使用教程!

该工具基于网页版抖音&#xff0c;可以用于抖音个人号等任何权限的账号&#xff01; 获取软件 联系我的v 信&#xff1a;llike620 基本使用 了解GPT的&#xff0c;可以配置FastGPT这种训练知识库的AI进行回复 不了解的&#xff0c;可以配置关键词回复 点击抖音私信按钮&a…

【leetcode994】腐烂的橘子(BFS)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 首先将所有烂橘子入队&#xff0c;然后常规BFS遍历&#xff0c;注意while的截止条件除了队列为空&#xff0c;新鲜橘子数量大于0&#xff08;没新鲜橘子也没必要继续遍历&#xff0c;保证时间计算的正确性&#xff09;&a…

关于Build Your Own Botnet的尝试

这是一次失败的尝试、 原文地址&#xff1a;关于Build Your Own Botnet的尝试 - Pleasure的博客 下面是正文内容&#xff1a; 前言 我在上一篇关于DDOS的文章种提到过这个项目&#xff0c;而且说明了由于这个项目是在2020年发布并开源的&#xff0c;并且已经有两年没有进行跟…

HMI界面:感官与体验俱佳的智能家居界面分享

Hello&#xff0c;我是大千UI工场&#xff0c;本期分享HMI人机交互界面在智能家居领域的案例&#xff0c;关注大千&#xff0c;学习N多UI干货&#xff0c;有设计需求&#xff0c;可以联络。 设计感官和体验俱佳智能家居的UI界面时&#xff0c;可以考虑以下几个方面&#xff1a;…

【王道数据结构】【chapter5树与二叉树】【P159t17~19】【统考真题】

目录 2014年统考 2017年统考 2022年统考 2014年统考 #include <iostream> #include <stack> #include <queue> typedef struct treenode{int weight;struct treenode *left;struct treenode *right; }treenode,*ptreenode;ptreenode buytreenode(int x) {p…

python----输入输出算数运算

1.格式化输出 如果我们直接打印输出&#xff0c;就是输出变量的值&#xff0c;例如&#xff1a; 如果我们想打印a10就需要格式化字符串&#xff0c;就是使用f进行格式化&#xff0c;如图所示&#xff1b; 2.控制台输入 input执行的时候&#xff0c;就会等待用户进行输入&…

free pascal:fpwebview 组件通过 JSBridge 调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr &#xff0c;编写 js_bind_speak.lpr 如下&#xff0c;通过 JSBridge 调用本…