Makefile中的Shell脚本简介

给很多刚接触Makefile的人:

1、Makefile中可以嵌入shell脚本,而且能像shell脚本中一样,各种命令、控制结构都可使用。

2、Makefile的主要结构是

...

target ... : prerequisites ... 

[TAB]command1

[TAB]command2

[TAB]...

...

只有在command位置的shell脚本才是有效的,也就是只有在“生成目标的规则处”写的shell脚本才是shell脚本,其它位置的shell都是无效的。当然也可以使用xx=$(shell pwd)这种特别的形式来简单使用shell。

3、Makefile中的shell,不同的行在不同的进程中执行,不同的行直接不能传递变量,所以很多时候shell都尽量使用反斜杠()来把相关的内容串成一行。比如:

all:

    @CC=arm-linux-gcc

    @echo $(CC)

上面的echo是打不出来东西的。

CC=arm-linux-gcc

all:

    @echo $(CC)

上面的echo是OK的,而且多半都是这么写。

4、Makefile变量和shell变量是两个不同的东西,并且为了避免Makefile变量和shell变量冲突,引用Makefile变量最好使用$(Makefile_Var),引用shell变量时最好使用$$Shell_Var。

5、Makefile的多字符变量只能使用$(VAR)或${VAR}来引用,不能使用$VAR,$VAR会被解释成$(V)AR. 但如果在纯粹的shell编程中,纯shell脚本里可以使用$VAR来引用VAR这个变量。

收藏于 2012-08-08

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Linux Bash脚本15分钟进阶教程

这里的技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT)。这里是一个修订和扩增版本。

490
来自专栏walterlv - 吕毅的博客

如何使用 MSBuild Target(Exec)中的控制台输出

发布于 2018-06-13 00:08 更新于 2018-09...

451
来自专栏梦里茶室

【Chromium中文文档】线程

概览 Chromium是一个极其多线程的产品。我们努力让UI尽可能快速响应,这意味着任何阻塞I/O或者其他昂贵操作不能阻塞UI线程。我们的做法是在线程间传递消息...

1996
来自专栏我就是马云飞

三大架构的比较

MVC 模型层(Model) 负责存储、检索、操纵来自数据库或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 控制层(Contro...

19510
来自专栏Charlie's Road

<Solidity学习系列四>使用编译器

Solidity存储库的一个构建目标是solc,solidity命令行编译器。 使用solc --help为您提供所有选项的解释。 编译器可以生成各种输出,范围...

752
来自专栏小狼的世界

Leetcode刷题记录:编码并解码短网址

编写一个类,提供两个方法。一个可以将普通的网址编码成短网址,一个可以将短网址还原为普通网址。

591
来自专栏Java技术分享

《Redis设计与实现》简读

一、数据结构与对象 简单动态字符串(SDS) 相比C字符串增加记录字符串长度的,获取字符串长度复杂度为O(1) 相比C字符串增加记录已分配内存空间,可以避免缓冲...

1775
来自专栏MasiMaro 的技术博文

PE文件详解二

本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 ...

883
来自专栏进击的程序猿

php异常处理 之 BooBoo库介绍

本文介绍php开源库BooBoo,是一个处理php异常和错误的开源库,通过简单的分析代码,我们知道了实际项目中怎么正确的设置错误和异常。

642
来自专栏大内老A

从数据到代码——通过代码生成机制实现强类型编程[上篇]

我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual Studio,你就应该体验过它带给我们在编程上的便利。随便列举...

1569

扫码关注云+社区