Makefile和shell配合使用
2010-01-20 17:27
260 查看
Makefile
与
Shell
的问题
大概只要知道
Makefile
的人,都知道
Makefile
可以调用
Shell
脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的结果,然后在计算机上运行这些例子,对照看一下。
说明:
1.
Shell
脚本在
target
里才有效,其它地方都被忽略掉了。所以示例一中,
”build debug”
之类的字符串根本打印不出来。示例一的正确写法是:
2.
make
把每一行
Shell
脚本当作一个独立的单元,它们在单独的进程中运行。示例二中,两行
Shell
脚本在两个莫不相干的进程里运行,第一个进程把
CC
设置为
arm-linux-gcc
,第二个进程是不知道的,所以打印的结果自然不是
arm-linux-gcc
了。示例二的正确写法是:
3.
make
在调用
Shell
之前先进行预处理,即展开所有
Makefile
的变量和函数。这些变量和函数都以
$
开头。示例三中,
Shell
拿的脚本实际上是
echo arm-linux-gcc
,所以打印结果正确。
4.
make
预处理时,所有以
$
开头的,它都不会放过。要想引用
Shell
自己的变量,应该以
$$
开头。另外要注意,
Shell
自己的变量是不需要括号的。示例四的正确写法是:
感谢,Thanks!
与
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" |
make
把每一行
Shell
脚本当作一个独立的单元,它们在单独的进程中运行。示例二中,两行
Shell
脚本在两个莫不相干的进程里运行,第一个进程把
CC
设置为
arm-linux-gcc
,第二个进程是不知道的,所以打印的结果自然不是
arm-linux-gcc
了。示例二的正确写法是:
示例二: |
all: @CC=arm-linux-gcc; echo $(CC) |
或者: |
all: @CC=arm-linux-gcc; / echo $(CC) |
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 if判断
- Makefile------宏、if条件、shell命令的使用
- 在Makefile中使用shell命令的注意事项
- shell之菜单+跳板机(跳板机管理及连接脚本与下一个for循环的脚本配合使用)
- makefile中使用shell 命令
- nmap配合shell使用
- Makefile 和 shell中的环境变量使用
- android makefile 文件中使用shell命令
- 菜鸟学习历程【2】vim的简单操作、GCC工具链、make和Makefile、GDB调试工具、Shell使用基础
- Makefile中使用shell实例
- Makefile中使用shell注意点
- 不完全整理Makefile中的shell语句使用(仅针对实用为主)
- Makefile中使用shell注意事项
- shell和awk配合使用
- Android RecyclerView与CardView的配合使用
- MongoDB学习(三):MongoDB Shell的使用
- 使用shell检查并修复mysql数据库表的脚本