#Linux(make工具和makefile文件以及makefile语法)

news2024/12/21 23:51:59

(一)发行版:Ubuntu16.04.7


(二)记录:

(1)make为编译辅助工具,解决用命令编译工程非常繁琐的问题

(2)在终端键入make即可调用make工具(在当前目录寻找makefile文件)

(3)makefile是描述整个工程编译和链接的文件

(4)makefile文件必须为makefile或者Makefile

(5)make及makefile使用

a.创建一个源文件(编写了程序)并且创建一个makefile文件

b.在makefile文件中写入规则,保存退出

 c.键入make命令编译


(三)命令:

Make语法上:

目标:依赖

[Tab]命令

如:

/**整个编译**/

all:
    gcc hello.c -o hello


/**部分编译**/

hello.o:hello.c
    gcc -c hello.c -o hello.o


/**部分编译**/

hello:hello.o
    gcc hello.o -o hello

 (1)示例:

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o

 

make + 文件名单独编译某一个文件,但是如果编译的文件不存在依赖其他编译命令生成,那么就会先编译他所依赖的文件,形成联动编译。如果只键入make那么就会默认编译第一个规则

(2)编译完成之后会产生一些中间文件如.o文件,也可以在makefile中进行规则定义删除

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o

//删除所有.o文件以及hello可执行文件
clean:
    rm -rf *.o hello

 (3)如果vim编辑器无法键入[Tab]

(4)makefile所在文件夹不能有与目标文件名相同的文件

如目标编译hello,该目录下就不能有名为hello的文件,否则会报错make :'hello' is up to date.为了解决文件可能同名的问题引入“伪目标”的概念 ,只需加入".PHONY:目标",如将clean改为伪目标。

all:hello.o
    gcc hello.o -o hello

hello.o:hello.c
    gcc -c hello.c -o hello.o


.PHONY:clean
clean:
    rm -rf *.o hello

(5)变量赋值:

:=      立刻赋值

=          延迟赋值

?=      如果前面没有赋值则在这里赋值,如果前面赋值了则这里不赋值

+=       追加赋值

$(变量1)    引用变量1

(另一种追加方式 aaa\bbb\ccc) 

(6)makefile文件中的注释为“#

(7)自动化变量:

$@        表示所有目标

$<          表示第一个依赖文件,如果依赖模式是%,那么它就表示一系列文件。(%通配符类似*)

$            表示所有依赖

 Make语法下:

(1)wildcard函数--------------------展开指定目录

格式     $(wildcard pan)

此处echo前面加上@即可不打印echo,只打印下面的内容 

(2)notdir-----------------------------去掉路径

格式     $(notdir $(var))

(3)dir---------------------------------取出目录

格式      $(dir  name)

(4)patsubst--------------------------替换文件后缀

格式        $(patsubst 原文件,目标文件,文件列表)

替代      $(文件列表:原文件=目标文件)

使用这个函数并没有改变原文件,一般配合其他函数使用

(5)foreach        把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行<text>所包含的表达式,每一次<text>会返回一个字符串

格式:$(foreach <var>,<list>,<text>)

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

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

相关文章

学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期

Day29 多线程 12. 线程的礼让 Thread.yield(); 理解&#xff1a;此方法为静态方法&#xff0c;此方法写在哪个线程中&#xff0c;哪个线程就礼让 注意&#xff1a;所谓的礼让是指当前线程退出CPU资源&#xff0c;并转到就绪状态&#xff0c;接着再抢 需求&#xff1a;创建两个…

P8764 [蓝桥杯 2021 国 BC] 二进制问题

很板的一道题目&#xff0c;注意就是数组别开的太小 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair<int,int>; #define int long long const int N 1e510; const int inf 0x3f3f3f3f; const int mod 1e97; int gcd(int a,…

【81-100】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【81-100】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用81、对于FIN_WAIT_2&#xff0c;CLOSE_WAIT状态和TIME_WAIT状态&#xff1f;你知道多少?82、你…

算法第三十四天-有效数独

有效数独 题目要求 解题思路 一个简单的方法是&#xff0c;遍历9*9书读三次&#xff0c;以确保&#xff1a; 行中没有重复的数字列中没有重复的数字3*3子数独中没有重复的数字 但是&#xff0c;实际上&#xff0c;所有的一切都以可以在一次迭代中完成 可以使用box_index (r…

Kubernetes Gateway API 介绍

Kubernetes Gateway API 诞生背景 在 kubernetes 中&#xff0c;流量的治理主要分为两个部分&#xff1a; 南北向流量东西向流量 南北向流量&#xff08;NORTH-SOUTH traffic&#xff09; 在计算机网络中&#xff0c;南北向流量通常指数据流量从一个**内部网络&#xff08;…

20231911马星 2022-2023-2 《网络攻防实践》实验四

1.实践内容 在网络攻防实验环境中完成TCP/IP协议栈重点协议的攻击实验&#xff0c;包括ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击。 1.1 ARP欺骗攻击&#xff1a; &#xff08;1&#xff09;ARP欺骗&#xff08;ARP spoofing&#xff09…

【算法-PID】

算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节&#xff08; Proportion&#xff09;■ PID 积分环节&#xff08;Integral&#xff09;■ PID 微分环节&#xff08;Differential&#xff09; ■ PID PID 分别是 Proportion&#xff08;比例&#xff09;、 Integr…

如何购买小程序模板开发企业小程序

在当今数字化时代&#xff0c;小程序已成为企业展示与营销的重要工具。购买一个小程序模板&#xff0c;来快速上线自己的企业小程序&#xff0c;已成为当前最流行且性价比最高的开发方式。 乔拓云网站提供了丰富的小程序模板资源&#xff0c;无论你需要哪种风格或功能的小程序&…

WOT全球技术创新大会2024北京站:技术派与市场派共话AIGC新未来

WOT全球技术创新大会2024将在北京盛大开幕&#xff0c;聚焦AIGC时代的软件工程新范式、AI Agent探索与应用、多模态AIGC前沿探索以及大模型部署与应用等核心议题。此次大会将促进技术信仰派与市场信仰派间的深度对话与交流&#xff0c;共同探讨AIGC技术的未来发展方向。 在过去…

【Java程序设计】【C00351】基于Springboot的疫情居家办公系统(有论文)

基于Springboot的疫情居家办公系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题 一、flask文档上传文件的介绍二、上传文件的实现2.1、生成一个from表单&#xff0c;用来提交图片2.2、编写上传的逻辑 三、运行代码、以及常见异常四、写在最后 一、flask文档上传文件的介绍 Flask上传文件的文档介绍&#xff0c;文件上传的基本思想…

快递鸟物流轨迹地图API接口,包裹行程尽在掌握!

在快节奏的现代生活中&#xff0c;物流行业作为连接生产者与消费者的桥梁&#xff0c;其重要性不言而喻。随着电子商务的飞速发展&#xff0c;人们对物流信息的实时性和准确性要求越来越高。为了满足这一需求&#xff0c;快递鸟物流轨迹地图API应运而生&#xff0c;为广大用户提…

WIFI驱动移植实验: wireless tools 工具测试

一. 简介 前面一篇文章交叉编译了 wireless tools 工具&#xff0c;并移植到开发板文件系统上。文章如下&#xff1a; WIFI驱动移植实验&#xff1a; wireless tools 工具移植-CSDN博客 本文对 所移植的操作 WIFI设备的工具 wireless tools进行测试。确认是否可以使用。 二…

【浅尝C++】使用模板实现泛型编程第一弹=>函数模板/类模板/模板匹配原则/函数模板原理

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f6a9;一些备注&#xff1a;之前的文章有点杂乱&#xff0c;这里将前面的知识点重新组织了&#xff0c;避免了过多冗余的废话。 &#x1f3af;每日努力一点点&#xff0c;技术变化看…

如何删除Excel中的空白行?这里提供详细步骤

要从数据集中删除所有空白行吗&#xff1f;如果是这样&#xff0c;Microsoft Excel提供自动和手动方法来清除空白行并向上移动数据。下面是如何使用这些方法。 删除空白行时&#xff0c;Excel会删除整行并上移数据&#xff0c;以便数据集中不再有空行。记住&#xff0c;你也可…

linux下使用迅雷的完美办法(网络版免费),其他下载工具

迅雷有自家服务器的支持&#xff0c;因此&#xff0c;其他下载器&#xff0c;可能难以匹敌 &#xff1f; linux下使用迅雷的完美办法&#xff08;免费&#xff09; https://blog.csdn.net/lqrensn/article/details/8853949 网络版 Linux下安装并使用迅雷 https://www.lxlin…

【微服务】Nacos(注册中心)

文章目录 1.基本介绍1.概述2.Nacos下载和运行&#xff08;java8/maven3.2.x&#xff09;1.解压到没有中文路径的2.双击startup3.浏览器输入http://192.168.242.124:8848/nacos4.用户名和密码为nacos5.cmd输入netstat -anb | more查看监听端口 2.创建Nacos服务提供者 100041.项目…

人工智能在产业中应用--生成智能

二、生成式人工智能 前面介绍了很多人工智能的应用&#xff0c;接下来部分我们会介绍当前正在进行的生成智能。生成智能和以往的人工智能有什么区别&#xff0c;个人觉得主要区别就在于“度”。在表现上就是以前的人工智能更多是利用既有的数据集分布挖掘和解决在这个数据集下…

WPF 命名空间解释

在C#中有命名空间的概念&#xff0c;我们可以使用using引入&#xff0c;就可以使用其中的类&#xff0c;在xaml中&#xff0c;也同样有命名空间&#xff0c;在window标签中用xmlns声明的这几行&#xff0c;这就是本页面引入的命名空间。 一般的情况下&#xff0c;我们引入命名空…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络&#xff1a;传输控制协议&#xff08;Transmission Control Protocol-TCP协议&#xff09; 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手&#xff0c;243)1.1 为什么要三次握手&#xff0c;两次不行吗&#xff1f; 2. 释放连接的过程(…