当前位置: 首页 > article >正文

Makefile中的变量

文章目录

  • 🍊自我介绍
  • 🍊Makefile中的变量
    • 常用的两种变量
      • 普通变量
    • 自动变量
    • 代码实操
      • fun.c
      • fun.h
      • main.c
      • Makefile


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的相关内容。


🍊Makefile中的变量

简介:
Makefile中使用变量优点类似于C语言中的宏定义。使用该变量相当于内容替换,使用变量可以使Makefile易于维护,修改起来变得简单起来。

常用的两种变量

普通变量

普通变量,一般是用户自己根据需求定义的变量,变量的定义要做到见名知意。
示例:
"=“是最普通的,在Makefile中容易搞错赋值等号,使用”="进行赋值,变量的值是整个Makefile中最后被指定的值。
eg:

OBJ_A = A
OBJ_B = $(OBJ_A) B
OBJ_A = AA

all:
	@echo "${OBJ_B}"


//经过上面的赋值后,最后OBJ_B的值是AA B,而不是A B;
因为在make命令时,会把整个Makefile展开,从而来决定变量最后的值
总的来说就是跟C语言的赋值结果不同,它是运行完所有行之后确定最终的赋值结果

":="表示直接赋值,赋予当前位置的值。

OBJ_A := A
OBJ_B := $(OBJ_A) B
OBJ_A := AA

all:
	@echo "${OBJ_B}"

//这样最后OBJ_B的值是A B

"?="表示如果该变量没有被赋值,赋值其等号后面的值。

VAR := M
VAR ?= A

all:
	@echo "{VAR}"   //M ;如果没有VAR := M 则最后的结果为A

自动变量

变量名含义
$@规则中的目标集合,在模式规则中,如果有多个目标的话,"$@"表示匹配模式中的目标集合
$<依赖文件集合中的第一个文件
$^所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,会去除重复的依赖文件,只保留一份

举例子说明:

all : main.o fun.o
	gcc main.o fun.o -o all
	//一般我们会这么写gcc main.o fun.o -o $@
$@ : all
$< : main.o
$^ : main.o fun.o

代码实操

fun.c

#include "fun.h"
#include <stdio.h>

int global = 20;

void print_value()
{
	printf("global = %d\n",global);
}

fun.h

#ifndef __FUN_H__
#define __FUN_H__

#include <stdio.h>

extern int global;
extern void print_value();

#endif

main.c

#include "fun.h"


int main()
{
	print_value();	
	return 0;
}

Makefile

CC := gcc

TARGET := main_exec
OBJECT := main.o fun.o

$(TARGET) : $(OBJECT)
	$(CC) $^ -o $@

%.o : %.c
	$(CC) -c $^ -o $@

clean :
	rm -rf *.o main_exec	

最后操作和上一节最后的操作一样,就可以得到我们的结果


http://www.kler.cn/a/403149.html

相关文章:

  • 【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
  • C++设计模式行为模式———中介者模式
  • 提升软件测试报告的质量:Allure2中添加用例失败截图、日志、HTML块和视频的方法
  • 【企业级分布式系统】ZooKeeper集群
  • MySQL - 数据库基础 | 数据库操作 | 表操作
  • 【qt版本概述】
  • 网络蠕虫病毒研究
  • Angular进阶之十一:从 Rxjs 获得的启发——改良方法传入参数的形式
  • Redis的过期删除策略和内存淘汰机制以及如何保证双写的一致性
  • C++面试基础知识:new vs malloc
  • 深入解析 Vue 3 中的 onShow 和 onHide 生命周期
  • 注解用于从 HTTP 请求中提取数据
  • 昇思MindSpore第四课---GPT实现情感分类
  • Ubuntu Linux使用前准备动作_使用root登录图形化界面
  • go-zero(五) 模板定制
  • Jquery实现jsonview
  • Java算法OJ(7)随机快速排序
  • vue3:scss引用
  • stm32————重映射基础知识点(PWM呼吸灯实验)
  • 模型压缩——训练后剪枝
  • windows安装redis, 修改自启动的redis服务的密码
  • Vue3 组件 view-shadcn-ui 2024.4.0 发布
  • 解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件
  • AWTK-WIDGET-WEB-VIEW 实现笔记 (2) - Windows
  • 阻尼Newton方法-数值最优化方法-课程学习笔记-5
  • 沃丰科技出海客服解决方案:为中国企业出海保驾护航