在Makefile中进行简单的数学运算

时间:2011-04-25 08:28:46

标签: shell makefile

我需要在Makefile中做一些简单的数学运算,但无法找到如何做到这一点。在shell脚本中,我会这样做:

A=1
B=2
C=$[$A+$B]

但是如何在Makefile中执行此操作?让我们以此为基础:

A=1
B=2
C=$(A)+$(B)

all:
        @echo 'A is $(A)'
        @echo 'B is $(B)'
        @echo 'C is $(C)'

当然这会输出C is 1+2。如何重写变量C的定义,以便Makefile输出C is 3

3 个答案:

答案 0 :(得分:1)

在shell中使用“$(())”

all:
        @echo C is $$(($(C)))

一年后编辑:

我不知道你需要在Makefile中使用$ C的最终值。 (你刚刚显示它只用在Makefile里面的shell脚本中,或者我犯了错误)你只需要将我的代码移动到$ C的定义:

C=$(shell echo $$(($A+$B)))

答案 1 :(得分:0)

Lai说...

A=1
B=2
C=$(shell echo $$(( $(A) + $(B) )) )

all:
    @echo 'A is $(A)'
    @echo 'B is $(B)'
    @echo 'C is $(C)'

答案 2 :(得分:0)

我发现以下两种方法都使用shell,效果很好: $$((...)) expr ... < / p>

A=1
B=2

#With Double-dollar
SUM_1 = $(shell echo $$(( $(A) + $(B) )))

#With 'expr'
SUM_2 = $(shell expr $(A) + $(B) )

$(info Sum with Double-$$: $(SUM_1))
$(info Sum with 'expr': $(SUM_2))

请注意,使用expr时, 会在+周围放置空格,否则会返回1+2。使用 $$ 时,不需要这样做。

当你有bc可用时,你应该使用它,因为代码更清晰:

A=1
B=2
SUM = $(shell echo $(A)+$(B) | bc )
$(info Sum with 'bc': $(SUM))

我发现以下页面非常有趣:http://www.humbug.in/2010/makefile-tricks-arithmetic-addition-subtraction-multiplication-division-modulo-comparison/