- 浏览: 1592841 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 45897设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3963全称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 2198享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1292以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7203设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3414下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8289在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3418背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2678默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 42351. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4247Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34772对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8469用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1794Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4599目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3884文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3443Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 25391 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4672Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
"shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...
### Linux Makefile与Shell文件相互调用实例详解 在Linux环境下,Makefile和Shell脚本都是非常重要的工具。Makefile主要用于构建项目,而Shell脚本则更侧重于执行一系列任务或命令。本文将详细介绍如何在Linux环境...
1. **目标与依赖**: Makefile中的每个目标(target)都有可能依赖于其他文件。当依赖文件改变时,make工具会自动更新目标。 2. **规则**: 规则由目标、依赖项和命令三部分组成,形如`target: dependency... command......
大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象...
bash shell自动生成Makefile
`Makefile`与`Shell`结合使用: 1. **调用Shell命令**:`Makefile`可以直接执行`Shell`命令,通过`$(shell command)`获取命令的输出,或者在规则中直接书写命令。 2. **构建过程**:通常`Makefile`会使用`Shell`脚本...
在Linux开发中,掌握Makefile规则和Shell脚本语言是非常重要的技能。让我们深入探讨这些知识点。 首先,关于静态库和动态库,静态库(.a文件)在编译时会将相关的函数代码直接链接到目标程序中,形成一个独立的可...
在【部分内容】中,提到了Makefile与Shell脚本的异同。两者都是文本文件,都可以执行Shell命令和定义变量,但解释器不同,Shell脚本由Shell解释,而Makefile由make解释。此外,Makefile以规则为基础,而Shell脚本以...
6. Makefile与Shell脚本的异同:Makefile与Shell脚本都是文本文件格式的脚本,但它们的解释器不同。Shell脚本由对应Shell程序解释,而Makefile由make程序解释。在格式上,Shell脚本以命令行为基本单位,Makefile以...
4、 支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前/后台状态,以及控制作业的挂起、中止与继续运行; 5、 使用Make工具建立工程; 6、 使用调试器gdb来调试程序;
### 知识点详解 #### 1....以上是对 Makefile 的一个全面概述,包括其背景、工作原理、与 Shell 脚本的区别以及具体的使用方法等。通过理解和掌握 Makefile,开发者可以更加高效地管理和编译大型项目。
7. **shell脚本与Makefile结合**:通过Shell脚本自动化生成Makefile,可以简化手动维护Makefile的工作,尤其在大型项目中,依赖关系复杂,这样的自动化工具非常实用。 8. **C语言编程**:`main.c`是C语言的主程序...
Shell是Linux系统的命令解释器,允许用户通过命令行与系统交互。在shell脚本中,你可以定义变量、执行运算、控制流程、使用正则表达式,并调用内置的命令。例如,`cat`用于合并和查看文件内容,`more`用于分页查看...
(更多详情、使用方法,请下载后细读README.md...\n内核配置更改\n与 SONiC 一起使用的 Debian 内核包括几乎所有可以在使用 Linux 的系统上找到的可用硬件。这大大增加了构建内核 Debian 映像所需的时间。由于有许多驱
#### 一、Makefile中`PWD=$(shell pwd)`解析 在探讨`PWD=$(shell pwd)`之前,我们首先理解`pwd`命令的含义。`pwd`(Print Working Directory)是Linux命令之一,用于显示当前工作目录的绝对路径。在开发环境中,...
目标通常是需要生成的文件,依赖是生成目标所需的前提条件,命令则是用于创建或更新目标文件的shell命令。Makefile中的规则是告诉make命令当依赖文件比目标文件新,或者目标不存在时,应该如何执行相应的命令来创建...