`
lobin
  • 浏览: 382804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

Function

写道
$(function arguments)

或者

写道
${function arguments}

 

字符串

字符串替换和分析的函数

 

subst

$(subst from,to,text)

 

文件

 

dir

$(dir names…)

 

notdir

 

$(notdir names…)

 

suffix

$(suffix names…)

 

basename

$(basename names…)

 

addsuffix

$(addsuffix suffix,names…)

 

addprefix

$(addprefix prefix,names…)

 

join

$(join list1,list2)

 

wildcard

$(wildcard pattern)

 

realpath

$(realpath names…)

 

abspath

$(abspath names…)

 

Conditional

if

$(if condition,then-part[,else-part])

 

or

$(or condition1[,condition2[,condition3…]])

 

and

$(and condition1[,condition2[,condition3…]])

 

foreach

$(foreach var,list,text)

 

file

$(file op filename[,text])

 

call

$(call variable,param,param,…)

 

value

$(value variable)

 

eval

 

origin

$(origin variable)

 

flavor

$(flavor variable)

 

Control Make函数

 

error

$(error text…)

 

warning

$(warning text…)

 

info

$(info text…)

 

shell

$(shell)

这个是Makefile中的一个函数,通过它可以执行shell命令。

 

如输出当前目录:

echo $(shell pwd)

/usr/bin

 

输出文件内容:

echo $(shell cat ./data)

cat...

 

在编写Makefile的时候,有时候需要在Makefile中对变量做一些求值,如加减乘除等算术计算。这个时候需要用到shell。

如下shell中,我们需要计算512 + 512 = ?

sh-3.1$ expr 512 + 512

1024

我们还可以用一对括号“()”将512 + 512括起来:(512 + 512)。但这样直接括起来的话会报语法错误:

sh-3.1$ expr (512 + 512)

 

sh: syntax error near unexpected token `512'

应该这样:

sh-3.1$ expr \( 512 + 512 \)

 

1024

这样看起来有点多余。这里是多此一举,不过复杂点表达式是需要的,比如:512 * (1 + 1),这个后面会讲到。

 

计算512 - 512 = ?

sh-3.1$ expr 512 - 512

0

 

 

如果计算512 * 2 = ?

是不是expr 512 * 2 。。。?

sh-3.1$ expr 512 * 2

 

expr: syntax error

报语法错误。应该这样:

sh-3.1$ expr 512 \* 2

1024

 

计算1024 / 512 = ?

sh-3.1$ expr 1024 / 512

2

 

计算512 * (1 + 1)

sh-3.1$ expr 512 \* \( 1 + 1 \)

1024

 

在makefile中计算512 * (1 + 1)= ?

echo "512 * (1 + 1)" = $(shell expr 512 \* \( 1 + 1 \))

有时候这样是有问题的,它输出:

512 * (1 + 1) =

可以这样:

echo "512 * (1 + 1)" = $(shell expr 512 \\* \( 1 + 1 \))

512 * (1 + 1) = 1024

这样就计算出来了。

这个例子似乎没什么作用。但在对多个变量进行计算求值时是有用的。如下:

size_in_block = 1

这里要计算size_in_block变量+1的结果。

 

echo "512 * ($(size_in_block) + 1)" = $(shell expr 512 \\* \( $(size_in_block) + 1 \))

512 * (1 + 1) = 1024

 

guile

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics