Как сделать арифметическую операцию в makefile? - PullRequest
0 голосов
/ 06 июля 2011

Я выполняю следующее в make-файле, чтобы измерить время, затраченное на выполнение какой-либо операции: -

START=$(shell date +%s) <br>
@if [ -s mfill.mapi.diff ]; then echo "difference exist between GOLDEN map file and test map file, see mfill.map.diff" ; fi <br>
END=$(shell date +%s) <br>
DIFF_SUB=$(shell echo $(END)\-$(START) | bc) <br>
@echo "It took ${DIFF_SUB} seconds"

Это приводит к следующему выводу: -

START = 1309941257
END = 1309941268
DIFF_SUB =
Это заняло секунды

Не могли бы вы, ребята, подсказать, где я ошибся?

1 Ответ

1 голос
/ 06 июля 2011

Я не думаю, что вы должны использовать фигурные скобки для переменных Makefile: $ (END) не $ {END}

Вы хотите вычитание, но вы использовали '*'.

jcomeau@intrepid:/tmp$ cat Makefile 
START=3
END=5
DIFF_SUB=$(shell echo $(END)-$(START) | bc)
test:
    @echo it took $(DIFF_SUB) seconds
jcomeau@intrepid:/tmp$ make
it took 2 seconds

Если вы делаете это внутри цели, используйте фигурные скобки, но удвойте $ s: $${DIFF_SUB}

jcomeau@intrepid:/tmp$ cat Makefile 
START=3
END=5
DIFF_SUB=$(shell echo $(END)-$(START) | bc)
test:
    @echo it took $(DIFF_SUB) seconds
test2:
    @START=3 && \
    echo HELLO && \
    END=7 && \
    DIFF_SUB=$$(($$END - $$START)) && \
    echo it took $${DIFF_SUB} seconds
jcomeau@intrepid:/tmp$ make test test2
it took 2 seconds
HELLO
it took 4 seconds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...