Делаем простую математику в Makefile - PullRequest
2 голосов
/ 25 апреля 2011

Мне нужно сделать простую математику в Makefile, но я не могу понять, как это сделать. В сценарии оболочки я бы сделал это так:

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 ]

1 голос
/ 25 апреля 2011

используйте «$ (())» в оболочке

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

Редактировать спустя один год:

Я не знал, что вам нужно использовать окончательное значение $ C вMakefile.(Вы только что показали, что он используется только в сценарии оболочки внутри Makefile, или я допустил ошибку) Вам просто нужно переместить мой код в определение $ C:

C=$(shell echo $$(($A+$B)))
0 голосов
/ 30 декабря 2015

Я нашел два следующих метода, оба с использованием shell, которые работают довольно хорошо: $$ ((...)) и expr ...

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/

0 голосов
/ 11 июня 2015

Как Лай сказал ...

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

all:
    @echo 'A is $(A)'
    @echo 'B is $(B)'
    @echo 'C is $(C)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...