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进程继承。
最新文章
- 删除mysql binlog日志
- java内存划分
- MVC中使用SignaIR入门教程
- oracle中SET DEFINE意思
- js 对象 copy 对象
- JSBinding + SharpKit / JavaScript 加载流程
- 如何重装air
- yii2.0 事务
- 关于使用Exception的一点心得
- python 时间处理(time和datetime介绍)
- [iOS基础控件 - 6.10.3] DatePicker &; UIToolBar
- View事件分发机制
- smali 语法基础
- C/C++基础知识总结——数据的共享与保护
- 初识beego
- python3之File文件方法
- 用.Net Core控制台模拟一个ASP.Net Core的管道模型
- 做一个有产品思维的研发:Scrapy安装
- Android 工程中各种文件的介绍
- .NET Core开发日志——WCF Client
热门文章
- [原][qt]解决qt在vs下could not find or load the Qt platform plugin ";windows"; in ";";问题
- P481tabtenn0
- 第 6 章 存储 - 044 - volume 生命周期管理
- 子数组最小值的总和 Sum of Subarray Minimums
- laravel配置路由除了 / 都是404解决办法
- 协方差分析 | ANCOVA (Analysis of Covariance)
- LeetCode--235--二叉树的最近公共祖先
- 基于windows使用fabric将gitlab的文件远程同步到服务器(本地)
- matlab:统计矩阵中某元素的个数
- chrome 浏览器去掉输入框背景透明色