Makefile中执行shell脚本
来源:互联网 发布:淘宝店铺全屏轮播图片 编辑:程序博客网 时间:2024/04/28 16:16
在之前一次编写makfile时候,有看到相关的makefile中使用$$来引用变量,而且尝试后发现$$使用居然和${}有类似的功能。当时也没具体追究相关的用法,当然刚才所说的都是错误的观念
$$:在makefile中会被替换成一个$。
相关资料是这么描述的:makefile中变量在声明时需要赋予初值,在使用时,需要在使用的变量前加"$"符号,但是最好使用"()"或者"{}"将变量包括起来。如果想使用真实的"$"符号,需要用"$$"来表示
在makefile中使用shell:
1. 使用makefile中的$(shell ...) eg:CUR_DIR=$(shell pwd)
2. 直接使用shell。在此有几点需要注意的:
- shell命令必须是在规则里面(可以参考以下例1)
- shell命令在makefile调用时候每行shell都是一个单独的进程。上一行定义的变量在下一行是无效的(参考例2)
- makefile调用shell时候(其实在执行时候都会有这个动作,不光光是shell),会对变量进行替换:如果是makefile中定义的变量(使用$()来引用的)会被替换成变量的值;如果是$$符号,会替换成$。然后传给shell来执行
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
以下内容转自:Makefile与Shell的问题
大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的结果,然后在计算机上运行这些例子,对照看一下。
示例一:
if [ "$(BUILD)" = "debug" ]; then echo "build debug"; else echo "build release"; fi
all:
echo "done"
示例二:
all:
@CC=arm-linux-gcc
@echo $(CC)
示例三:
CC=arm-linux-gcc
all:
@echo $(CC)
示例四:
SUBDIR=src example
all:
@for subdir in $(SUBDIR); /
do/
echo "building " $(subdir); /
done
说明:
1. Shell脚本在target里才有效,其它地方都被忽略掉了。所以示例一中,”build debug”之类的字符串根本打印不出来。示例一的正确写法是:
示例一:
all:
if [ "$(BUILD)" = "debug" ]; then echo "build debug"; else echo "build release"; fi
echo "done"
2. make把每一行Shell脚本当作一个独立的单元,它们在单独的进程中运行。示例二中,两行Shell脚本在两个莫不相干的进程里运行,第一个进程把CC设置为arm-linux-gcc,第二个进程是不知道的,所以打印的结果自然不是arm-linux-gcc了。示例二的正确写法是:
示例二:
all:
@CC=arm-linux-gcc; echo $(CC)
或者:
all:
@CC=arm-linux-gcc; /
echo $(CC)
3. make在调用Shell之前先进行预处理,即展开所有Makefile的变量和函数。这些变量和函数都以$开头。示例三中,Shell拿的脚本实际上是echo arm-linux-gcc,所以打印结果正确。
4. make预处理时,所有以$开头的,它都不会放过。要想引用Shell自己的变量,应该以$$开头。另外要注意,Shell自己的变量是不需要括号的。示例四的正确写法是:
示例四:
SUBDIR=src example
all:
@for subdir in $(SUBDIR); /
do/
echo "building " $$subdir; /
done
- Makefile中执行shell脚本
- 如何在MakeFile中执行shell脚本文
- Makefile中添加shell脚本
- 在makefile中执行shell
- Shell脚本中执行sql
- shell脚本中使用其他用户执行脚本
- makefile 中调用shell脚本注意事项
- shell脚本的执行方式和makefile常识
- Makefile与Shell脚本
- Makefile与Shell脚本
- Makefile与Shell脚本
- Makefile与Shell脚本
- makefile和shell脚本
- 执行shell脚本中declare: not found
- shell脚本中执行mysql语句
- 定时任务中shell脚本的执行
- shell脚本中执行cd命令
- Shell 脚本中执行mysql语句
- Deep Learning(深度学习)学习笔记整理系列
- Android6.0 watchdog
- js设置cookie
- Android-笔记-160822
- C++中的内联函数inline总结
- Makefile中执行shell脚本
- ViewDragHelper的使用
- 转换博客到csdn的原因
- 树莓派3 添加开机进度条
- PHP笔记:替换语句
- 单词接龙
- 一个程序占用内存的分类
- 剑指Offer_37_数字在排序数组中出现的次数
- python入门环境搭建