再次学习make

news2024/12/27 21:27:30

目录

1.Makefile的重要性

2.MakeFile的概念

3.Makefile的优点

4.Makefile的基本语法

5.变量

5.1 自定义变量

5.2 变量的赋值

5.3自动变量

5.4 Makefile的隐含变量

6.Makefile的函数

6.1意义:

6.2 基本语法:

6.3 部分常用函数

6.4 自定义函数


make第一个语句满足后面就不会继续执行了,所以要把最终生成的语句放到最前面。

1.Makefile的重要性

如果要编译很多个文件时,写gcc很麻烦,但是用make一个命令就完成了。

2.MakeFile的概念

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

3.Makefile的优点

1. 自动化编译:一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发 的效率

2. 编译效率高:再次编译,只编译修改过的文件 通过文件的时间戳,判断文件是否修改过,从而提升编译效率

4.Makefile的基本语法

 #一步编译.c->exe test:

test.c add.c sub.c

        gcc test.c add.c sub.c -o test

#两步编译.c->.o->exe

test:test.o add.o sub.o

        gcc test.o add.o sub.o -o test

test.o:test.c

        gcc -c test.c -o test.o

add.o:add.c

        gcc -c add.c -o add.o

sub.o:sub.c

        gcc -c sub.c -o sub.o

#伪目标

.PHONY:clean

clean:

        rm *.o test

 

5.变量

5.1 自定义变量

x = a            变量在声明时需要给予初值

$(x)或${x}    取值

如果你要使用真实的 $ 字符,那么你需要用 $$ 来表示。

5.2 变量的赋值

 

#自定义变量及赋值

#SRC = test.o add.o sub.o

SRC = test.o

SRC += add.o

SRC += sub.o

#两步编译.c->.o->exe

test:$(SRC)

        gcc $(SRC) -o test

test.o:test.c

        gcc -c test.c -o test.o

add.o:add.c

        gcc -c add.c -o add.o

sub.o:sub.c

        gcc -c sub.c -o sub.o

#伪目标

.PHONY:clean

clean:

        rm *.o test 

5.3自动变量

 

 #自动变量

#SRC = test.o add.o sub.o

SRC = test.o

SRC += add.o

SRC += sub.o

#两步编译.c->.o->exe

test:$(SRC) add.o

        @echo "$$+ is $+"

        @echo "$$^ is $^"

        @echo "$$< is $<"

        gcc $(SRC) -o $@

test.o:test.c

        @echo "\$$* is $*"

        @echo "\$$@ is $@"

        gcc -c $^ -o $@

add.o:add.c

        gcc -c $^ -o $@

sub.o:sub.c

        gcc -c $^ -o $@

#伪目标

.PHONY:clean

clean:

        rm *.o test

5.4 Makefile的隐含变量

#自动变量

SRC = test.o add.o sub.o

CC = gcc

CFLAGS = -c -g -Wall -I include

#两步编译.c->.o->exe

test:$(SRC)

        $(CC)  $(SRC)  -o  $@

%.o:%.c

        $(CC)  $(CFLAGS)  $^  -o  $@

#伪目标

.PHONY:clean

clean:

        rm *.o test 

6.Makefile的函数

6.1意义:

把一些功能封装起来

6.2 基本语法:

$( ) 或是 ${ }

6.3 部分常用函数

扩展通配符函数wildcard 语法: $(wildcard PATTERN...)

条件替换函数patsubst 语法: $(patsubst ,, )

#常用函数

SRC = $(wildcard *.c)

OBJ = $(patsubst %.c,%.o,$(SRC))

CC = gcc

CFLAGS = -c -g -Wall

#两步编译.c->.o->exe

test:$(OBJ)

        $(CC) $^ -o $@

%.o:%.c

        $(CC) $(CFLAGS) $^ -o $@

#伪目标

.PHONY:clean

clean:

        rm *.o test

6.4 自定义函数

语法: $(call ;,;,;,;...)

#自定义函数

SRC = $(wildcard *.c)

OBJ = $(patsubst %.c,%.o,$(SRC))

#把$(SRC)中所有的.c换成.o

CC = gcc

CFLAGS = -c -g -Wall

define MYFUN

        $(CC)  $^  -o  $@

        echo   $(1)

        echo   $(2)

endef

#两步编译.c->.o->exe

test:$(OBJ)

        $(call MYFUN,"a",2)a

%.o:%.c

        $(CC) $(CFLAGS) $^ -o $@

#伪目标

.PHONY:clean

clean:

        rm *.o test

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

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

相关文章

ECS-弹性容器服务 - Part 1

67-ECS-弹性容器服务 - Part 1 Hello大家好&#xff0c;我们今天的课时内容是ECS-AWS的弹性容器服务。 ECS-AWS的弹性容器服务 ECS是高度可扩展的、快速的容器管理和编排服务。 使用ECS&#xff0c;能够将您的Docker容器运行在AWS EC2或者 Fargate管理的无服务器架构上。 将容…

磨金石教育摄影技能干货分享|什么是序列摄影?它让摄影更加深刻

著名摄影师肖尔曾这样表达过自己的摄影理念。 他说&#xff1a;“吸引我的总是平淡无奇的瞬间”。 他与著名的纪实摄影师布列松不同&#xff0c;他不喜欢去游荡在生活之外&#xff0c;去抓拍他人的精彩瞬间。 他也不喜欢报道式的摄影&#xff0c;不去过多关注社会话题。 而是将…

第二证券|首批浮动费率基金三年成绩出炉 规模虽小收益可观

2019年12月18日至12月26日&#xff0c;6家基金公司试点建立了职业第一批逐笔比例提取成绩酬劳的起浮办理费率基金&#xff08;下称“起浮费率基金”&#xff09;。如今&#xff0c;这6只起浮费率基金运作均已满三年&#xff0c;到2022年12月26日&#xff0c;6只产品建立以来均匀…

Selenium Webdriver 实现原理详解

目录 1. Selenium 概述 2. 术语解释&#xff1a; 3. Selenium WebDriver 实现原理 4. 安装selenium 客户端&#xff0c;浏览器&#xff0c;驱动 4.1 安装selenium client lib 4.2 安装浏览器和浏览器驱动 4.3 例子代码 4.4 省略浏览器驱动的方法 4.5 测试代码与Webdr…

MAC控制器驱动

嵌入式Linux开发模式下&#xff0c;以太网硬件架构一般都是 MAC与PHY是独立的。所以以太网模块的硬件相关的驱动代码主要包括 GMAC 和 PHY&#xff0c;其中MAC控制器驱动由SoC厂商开发&#xff0c;PHY芯片驱动由PHY厂商开发&#xff0c;PHY 驱动一般使用通用 PHY 驱动&#xff…

无线烧录器(2)

传送门&#xff1a;连接 继上次完成了ESP32无线烧录器。那么有一个问题就是&#xff0c;一堆人都在一起想用这个来无线烧录呢&#xff0c;那么固件中定死的热点名称岂不是会互相的扰乱。所以需要自己编译属于自己的热点名称。 首先需要准备以下几样东西。 Ubuntu &#xff08;需…

excel数据透视表:善用这些功能,提高工作效率!下篇

在上篇文章中&#xff0c;我们为大家分享了透视表的前5条妙用&#xff0c;分别是合并同类项、按条件汇总数据、统计非重复数据、排名、批量创建表格&#xff0c;不知道大家都还记得吗&#xff1f;那么今天我们书接上回&#xff0c;继续为大家分享关于透视表的后5条妙用。 六、…

密码学_SM4国密算法

目录 简介 两类参数 加密流程 RKi和Ki4的生成方法 Xi4的生成方法​编辑 左移的概念 简介 在商用密码体系中&#xff0c;SM4主要用于数据加密&#xff0c;其算法公开&#xff0c;分组长度与密钥长度均为128bit&#xff0c;加密算法与密钥扩展算法都采用32轮非线性迭代结构&…

2022年终总结——脚踏实地,勇敢做自己

不知不觉又来到了年尾&#xff0c;即便都要迈入2023年了&#xff0c;但是在写日期的时候还会下意识的写成2021&#xff0c;这可能就是感觉一年额外漫长的原因吧。其实还是不希望过年的&#xff0c;毕竟跨过了新年要长岁了&#xff0c;看着日益增长的年岁还是会有点难过的&#…

JVM- 第一章-JVM与Java体系结构

JVM-第一章-JVM与Java体系结构1.1. 前言1.2开发人员如何看待上层框架1.3架构师每天都在思考什么&#xff1f;1.4我们为什么要学习JVM1.5 Java VS C1.6面向人群及参考书籍1.1. 前言 作为Java工程师的你曾被伤害过吗&#xff1f;你是否也遇到过这些问题&#xff1f; ● 运行着…

尚医通-数据字典添加缓存-配置nginx(十五)

目录&#xff1a; &#xff08;1&#xff09;后台系统 数据字典-添加缓存 &#xff08;2&#xff09;后台系统配置nginx &#xff08;1&#xff09;后台系统 数据字典-添加缓存 Spring Cache Redis 缓存数据 Spring Cache 是一个非常优秀的缓存组件。自Spring 3.1起&#xff…

CSDN第19次竞赛题解与总结

2022/12/28 19:00 CSDN第19次竞赛火热进行。 本场竞赛由「电子工业出版社 & CSDN」联合主办。 《Python机器学习算法与实战》 本书基于Python语言&#xff0c;结合实际的数据集&#xff0c;介绍如何使用机器学习与深度学习算法&#xff0c;对数据进行实战分析&#xff0c;在…

MySQL 启动日志报错:Starting MySQL. ERROR! The server quit without updating PID file

一 问题描述 1.1 问题描述 1.首先通过切换到mysql数据库所属用户&#xff1a; hd-mysql [rootlocalhost local]# su hd-mysql 2.启动mysql&#xff0c;报错 [hd-mysqllocalhost data]$ service mysql start Starting MySQL. ERROR! The server quit without updating PID…

50+Vue经典面试题源码级详解,你值得收藏!(一天更新一题,持续更新!!!)

Vue经典面试题源码级详解1、Vue组件之间通信方式有哪些&#xff1f;分析&#xff1a;思路分析&#xff1a;回答范例&#xff1a;1. 组件通信常用方式有以下8种&#xff1a;2、根据组件之间关系讨论组件通信最为清晰有效2、v-if 和 v-for哪个优先级更高分析&#xff1a;思路分析…

学习C语言笔记:数据和C

C Primer Plus &#xff08;第6版&#xff09;中文版第3章 学习内容&#xff1a; 1.关键字——int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary; 2.运算符——sizeof(); 3.函数——scanf(); 4.整数类型和浮点数类型的区别; 5.如何书写整型和浮点…

STL简介

目录 什么是STL STL的版本 STL的六大组件 如何学习STL STL的缺陷 结束语 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 STL的版本…

公司来了个卷王,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招就要开始了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&a…

从TikTok功能优化,抓住直播带货机遇

从今年流出的各类消息总结&#xff0c;TikTok的发展势头愈发迅猛&#xff0c;无论是布局东南亚各个站点&#xff0c;还是在其下载量的激增&#xff0c;都迸发出了前所未有的劲头&#xff0c;其对本身的优化也一直在进行。那么今年&#xff0c;TikTok都进行了哪些功能优化呢&…

p5.js 使用npm安装p5.js后如何使用?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 中都是使用 CDN 的方式去使用 p5.js 的&#xff0c;不太符合当下的开发习惯。 不管是使用 Vue 还是 React&#xff0c;我们日常项目大部分应该都是使用脚手架的方式进行开发了&#xff0c;按照 《p5.js 光速入门》 …

互联网营销的基础方法

推广目的 1.让目标消费群在最短的时间内认知新产品的功能、效果,缩短新产品推广期的时间长度,尽快进入成长期,创造效益。 2.使目标消费群产生试用的欲 望,并逐步将其培育成品牌忠诚者。 3.提高品牌知名度和美誉度。 4.提高现场售点的产品的销量。 5.巩固通路经销商的客…