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

【ARM 嵌入式 编译 Makefile 系列 18 -- Makefile 中的 export 命令详细介绍】

文章目录

    • Makefile 中的 export 命令详细介绍
      • Makefile 使用 export
      • 导出与未导出变量的区别
      • 示例:导出变量以供子 Makefile 使用

Makefile 中的 export 命令详细介绍

在 Makefile 中,export 命令用于将变量从 Makefile 导出到由 Makefile 启动的子进程的环境中。这通常在你需要在 Makefile 中设置环境变量,并确保这些变量在编译过程中启动的任何子 shell 或程序中都是可用的情况下使用。

当你在 Makefile 中导出一个变量时,任何由 make 启动的子进程(比如调用的 shell 脚本或其他程序)都将能够访问该环境变量。

Makefile 使用 export

export 语句通常写在 Makefile 的顶部,但也可以放在 Makefile 中的任何位置。以下是几个 export 的使用示例:

# 导出单个变量 
export CFLAGS=-O2 

# 导出多个变量 
export CC=gcc export CXX=g++ 

# 使用等号赋值并导出 
export LDFLAGS = -L/usr/local/lib 

# 使用条件赋值(若未定义则赋值)并导出 
export LIBS ?= -lm 

# 导出所有之前定义的变量 
export

在上面的示例中,我们导出了多个编译器和链接器选项。这意味着当 make 启动编译命令或其他子进程时,这些变量会成为子进程的环境变量。

导出与未导出变量的区别

如果一个变量没有被导出,那么它只在当前的 Makefile 及其包含的 Makefile 中可用。子进程和子 shell 无法访问未导出的变量。只有被明确导出的变量才能够在子进程的环境中被检测到。

示例:导出变量以供子 Makefile 使用

假设你有一个顶层 Makefile 和一个或多个子目录,每个子目录都有自己的 Makefile。你希望顶层的 Makefile 中的变量对子 Makefile 也是可见的。

export CFLAGS=-O2 
export LDFLAGS=-L/usr/local/lib 

all: 
	$(MAKE) -C subdir

在这个例子中,CFLAGSLDFLAGS 被导出到环境中,所以当顶层 Makefile 调用 subdir 目录中的 Makefile 时,subdir 的 Makefile 将能够访问这些环境变量。

在子 Makefile 中,你可以直接使用这些变量,就像它们是在本地定义的一样:

# 子目录的 Makefile 
all: 
	gcc $(CFLAGS) main.c -o main $(LDFLAGS) 

子 Makefile 将使用从顶层 Makefile 继承的 CFLAGSLDFLAGS 变量值。

export 命令在 Makefile 中非常有用,它允许你定义全局环境变量,这些变量可以在整个编译过程中的所有子进程中被访问。这样可以确保环境的一致性,并可以简化复杂项目中 Makefile 的管理。


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

相关文章:

  • JavaScript--流程控制
  • 麒麟系统下载依赖到本地
  • 蓝桥杯刷题第二天——背包问题
  • 文件操作:系统IO
  • windows 搭建flutter环境,开发windows程序
  • 【服务治理中间件】consul介绍和基本原理
  • 常用脚本-持续更新(文件重命名、视频抽帧、拆帧、删除冗余文件、yolo2xml、转换图片格式、修改xml)
  • ESXi 添加虚拟闪存 无可选设备问题排查
  • 优秀的时间追踪软件Timemator for Mac轻松管理时间!
  • 『Linux升级路』基础开发工具——make/Makefile
  • MFC 发布CLXHHandleEngine动态库1.0.0.0版本
  • 独乐乐不如众乐乐(二)-某汽车零部件厂商IC EMC企业规范
  • EM32DX-C1【分布式io】
  • Android YUV存储方式
  • 通过视频文件地址截取图像生成图片保存为封面图
  • Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象
  • HTML新手入门笔记整理:HTML常用标签总结表
  • Redis key的类型以及命令
  • nginx配置及理解
  • 浅谈基于EIoT能源物联网的工厂智能照明系统应用改造
  • 【开源】基于JAVA的在线课程教学系统
  • 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑氢储一体化协同的综合能源系统低碳优化》
  • 单片机学习3——数码管
  • 2023中国信通院光计算技术与产业发展研究报告
  • kubernetes使用nfs创建pvc部署mysql stateful的方法
  • cesium雷达扫描圈