我需要在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
?
答案 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))