MakeFile中export的使用
在shell中,可以使用export修改当前进程的环境变量。
例如:export PATH=.:$PATH
将当前路径加入可执行文件查找路径(PATH)中,这样你就不要敲“./excutable” 来执行当前路径中的excutable。而只需要键入 “excutable” 就行了。
make可以执行shell命令,当然也包括export。同时,make本身的语法,也含有export操作符。这样,在同一个Makefile中,两个export可能遵循完全不同的语法,shell命令语法和make语法,他们的作用也就完全不同。
1)Makefile中shell版export
小标题的意思是,这里的export是shell命令。它通常包含在Makefile的规则中,成为某规则的命令行的一部分。
例如:
init:
export DEBUG=1
……
……
run: init
./myapp
第一条init规则的本意是设置环境变量DEBUG=1(可能作者想让以后启动的程序myapps在Debug模式下运行)。
但是上述规则没有起到作者想要的作用:对后来启动的程序apps来说,DEBUG并没有改变。原因何在?
首先,上面export行是shell命令;对每一行shell命令,make将启动一个新的进程执行这行shell命令。
由于新启动的子进程的环境变量完全跟父进程不相干,因此export并不能改变父进程的环境变量,进而也不能改变父进程以后启动的子进程,或曰“弟弟进程”的环境变量。
正确的写法应该是:
run:
export DEBUG=1 && ./myapp
或者:
run:
env DEBUG=1 ./myapp
2)Makefile中make版export
同上,小标题的意思是,这里的export完全是make语法中的操作符。它通常是用来向后来发起的make进程(这些后起的make进程由当前的make进程启动)传送变量。
例如:
recursively_build:
$(MAKE) –c arch/src/ arch=x86_64
而arch变量是文件arch/src/Makefile中的一个关键的开关变量,它将决定哪一种architecture的源文件将被编译链接。
为了将变量arch传递给将要处理arch/src/Makefile的子make进程,需要用export:
export arch
这里的export出来的变量arch将被子make进程继承。
MakeFile中export的使用的更多相关文章
- Makefile中export分析
在分析内核启动过程的./arch/arm/Makefile文件里碰到了这样字段 162 export TEXT_OFFSET GZFLAGS MMUEXT 然后在子目录arch/arm/kernel/ ...
- makefile中一些编译器选项
Libraries Static Libraries a collection of ordinary object files (目标文件的集合) loaded at program link ti ...
- Makefile中的$(MAKE)
今天看uboot2018顶层的Makefile中发现文件中export一个MAKE变量,export是为了向底层的Makefile传递这些变量参数,但是找了半天没有找到这个MAKE变量在哪定义的. 决 ...
- Makefile 中:= ?= += =的区别
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = ...
- Makefile中的特殊宏定义以及实用选项
Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $? 当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@ 当前目标我名字 $< 当前依赖文件的名 ...
- makefile中的自动化变量$@,$%,$
转自:http://www.2cto.com/os/201302/191344.html makefile中的自动化变量$@,$%,$ 自动化变量 模式规则中,规则的目标和依赖文件名代表了一 ...
- MakeFile中赋值
Makefile 中:= ?= += =的区别 在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为 ...
- makefile中引用其他makefile方法
在Makefile中引用其他Makefile文件的方法是,使用inclue filename.mk
- makefile 中 $@ $^ %< 使用【转】
转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 ...
随机推荐
- [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能
oe中的视角加速感觉好奇怪,就仿照谷歌方式去改了. 先看看oe原来的漫游器改变视角的接口: void CameraManipulator::setViewpoint(const Viewpoint&a ...
- QT json字符串生成和解析
1 QT json字符串生成和解析 1.1 QT Json解析流程 (1) 字符串转化为QJsonDocument QJsonParseError json_error; QJso ...
- [C#]创建表格(.xlsx)的典型方法
Time:2017-10-11 10:12:13 利用EPPlus(4.1): 下载引用地址:http://epplus.codeplex.com/ --EPPlus is a .net libr ...
- HTML5-用canvas画布rotate字体旋转(中国象棋棋谱)。
一开始我们老师安排我做这个作业,在这个作业我遇到了一个很重大的问题就是,文字旋转这么旋转,我查了很多资料. 1发现绘画正方形,使他正方形中心原点旋转非常容易理解.(我相信这个很多人看一下都会懂,) 1 ...
- js时间戳如何转时间
js时间戳如何转时间 一.总结 一句话总结:Date对象分别获取年now.getFullYear()月now.getMonth()+1日now.getDate()即可 Date对象分别获取年now.g ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单拖放控制
jQuery EasyUI 树形菜单 - 树形菜单拖放控制 当在一个应用中使用树(Tree)插件,拖拽(drag)和放置(drop)功能要求允许用户改变节点位置.启用拖拽(drag)和放置(drop) ...
- 20171022xlVBA练手提取入所记录
Sub GetWordText改进() Dim Wb As Workbook Dim Sht As Worksheet Dim Rng As Range Dim wdApp As Object Dim ...
- java控制流
目录 1.引用数据类型 2.流程控制语句 2.1 条件控制语句if 2.2 if语句与三元运算符的互换 2.3 循环语句 2.4 循环嵌套 2.5 跳转语句 2.6 选择结构switch 3.猜数字案 ...
- python基础之函数参数,名称空间,以及函数嵌套
函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...
- css 选择器二
2.4 盒模型 2.4.1 定义 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型 ...