- 浏览: 1581249 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
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 |
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45636设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3920全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2164享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1250以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7160设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3367下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8252在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3388背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2644默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 41991. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4205Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34695对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8401用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1765Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4563目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3823文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3401Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 24981 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4561Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
"shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...
跟我一起写Makefile和Shell的主要命令,对于初学Linux开发非常有用
大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象...
主要介绍了Linux makefile 和shell文件相互调用实例详解的相关资料,需要的朋友可以参考下
bash shell自动生成Makefile
make file shell 文档make file shelmake file shell 文档l 文档
介绍交叉编译器静态库、动态库的编译方式;介绍Makefile规则、语法;介绍Shell脚本常见语法、Shell脚本常见练习题等等。
4、 支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前/后台状态,以及控制作业的挂起、中止与继续运行; 5、 使用Make工具建立工程; 6、 使用调试器gdb来调试程序;
(更多详情、使用方法,请下载后细读README.md...\n内核配置更改\n与 SONiC 一起使用的 Debian 内核包括几乎所有可以在使用 Linux 的系统上找到的可用硬件。这大大增加了构建内核 Debian 映像所需的时间。由于有许多驱
make是一个命令工具,它...而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。
│ 9makefile获取shell结果实现目录创建判断和根据目录生成目标名称 │ 10嵌套make同时编译和清理多项目 │ 11自定义makefile函数调用实现中的install │ 12使用makefile生成后台启动和停止的脚本并安装 │ 13项目...
其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样...
其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样...
make是一个命令工具,它...而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。
1.2 问题和BUG 2 Makefile文件介绍 2.1 规则的格式 2.2一个简单的Makefile文件 2.3make处理Makefile文件的过程 2.4使用变量简化Makefile文件 2.5让make推断命令 2.6另一种风格的Makefile文件 2.7在目录中...
makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令. makefile...
其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样...