Makefile与shell脚本区别
在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文试着归纳一下Makefile和shell脚本的不同。
1、 shell中所有引用以$打头的变量其后要加{},而在Makefile中的变量是以$打头的后加()。实例如下:
Makefile
PATH="/data/"
SUBPATH=$(PATH)
Shell
PATH="/data/"
SUBPATH=${PATH}
2、Makefile中所有以$打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),都需要加两个$符号($$)。实例如下:
PATH="/data/"
all:
echo ${PATH}
echo $$PATH例子中的第一个${PATH}引用的是Makefile中的变量,而不是shell中的PATH环境变量,后者引用的事Shell中的PATH环境变量。
3、通配符区别
shell 中通配符*表示所有的字符
Makefile 中通配符%表示所有的字符
4、在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:
VAR="Hello"
echo "$VAR"
all:
.....以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:
VAR="Hello"
all:
echo "$VAR"
.....以上代码,在make all的时候将会执行echo命令。
5、在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“; \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行,例如:
SUBDIR=src example
all:
@for subdir in $(SUBDIR); \
do\
echo "building "; \
done上述可以看出for循环中每行都是以”; \”结尾的。
Makefile与shell脚本区别相关推荐
- Makefile和shell脚本调用上的一些总结
大家都知道在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着介绍一下Makefile和shell脚本的不同. 1.在Makefile中只能在target中 ...
- perl、python、shell脚本区别
个人目前工作主要用到的脚本语言是shell.perl sed和awk一般融入到shell里面应用, bash是shell的一种, 也是linux的默认shell shell是linux内核和用户命令的 ...
- 嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)
大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程. 目录 前言 一.Shell 脚本基础说明 1.1 什么是 Shell 脚本 1.2 Shell 脚本的 ...
- Makefile文件和shell脚本
1.在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的.比如如下代码就是没有任何输出: VAR="Hello" echo "$VAR&quo ...
- linux shell脚本的执行方式与区别
linux shell脚本的执行方式与区别
- 在c语言中逗号运算符若不带括号,详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]...
概述 很多时候我们在写shell脚本的时候总会碰到不同的括号,那么这些不同的括号有什么区别呢? $() 用于命令交换 说明:平时脚本用的``符号也是用于命令交换的哦,和$() 的操作是一样的 ${ } ...
- shell脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
一直以为在shell脚本中#都是代表着注释功能,同样在脚本开始的#!/bin/sh也只是告诉用户这是一个shell脚本,而最近顺手查了下,才发现不是这个意思,分享下面的文章. 一.意思 #!/bin/ ...
- shell脚本:exit 0 和 exit 1有什么区别?他们和return不同,return是关键字,exit是一个shell函数
定义 exit 0 :正常运行程序并退出程序.使用echo $? 返回0,也就是说调用环境认为你的程序执行正常. exit 1 :非正常运行导致退出程序,也可以是其他数字.系统程序对于程序运行错误是有 ...
- shell的基本概念 以及shell和shell脚本的区别
Shell简介 概述 Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令,并把它送入内核去执行.内核是Linux系统的心脏,从开机自检就驻留在计算机的内 ...
最新文章
- sql server:alter database name
- brew改源无效问题之一
- 设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)...
- linux7网卡配置vlan,centos7配置vlan,实现一个网卡两个地址的功能
- Spartacus integration library 文件夹的设计
- mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
- 基于Spring中的事务管理机制
- 命令行BASH的基本操作
- E-Prime2.0安装避坑指南
- SecureCRT的下载与使用
- 专用发票扫描识别SDK
- iRedMail在Debian或Ubuntu Linux上的安装
- 学习(四):显示FPS,和自定义显示调试
- pytho语法总结(1):基础知识,列表介绍,列表操作
- 利用网络实现自己的六度人脉
- R语言也可以进行ATAC数据的完整分析啦!
- 查找python安装路径
- linux系统读取plc状态,Linux系统下上位机通讯协议及PLC冗余系统组态-工业支持中心-西门子中国...
- 欺骗的艺术----(5)
- vmware安装vsp
热门文章
- 关于线段树or 树状树状 在二维平面搞事情!Orz
- 2018 10 23
- 现代软件工程 第3-6章 作业
- awk 查看ip连接数(常见应用一)
- postgresql生产环境数据库迁移
- 提高Eclipse的速度,去掉对于工程的 Validatioan
- 自己的 「QA票 CheckList 」 KPT
- OxA6可以作为C语言常量吗,淮阴师范学院期末考试c语言题库
- 【Oracle】ORA-30042: Cannot offline the undo tablespace
- android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题