Использование расширения bash arithmeti c в make-файле GNU - PullRequest
1 голос
/ 16 марта 2020

Я хотел бы использовать расширение bash arithmeti c для бинарных операций в Makefile (GNU make + bash в Debian). Они не покрываются expr. Мне нужно это в Makefile:

$ x=$(( 255 & 2#11110000)); echo $x
240

Вещи, которые не работают:

$ cat Makefile 
all: a b

a: # $ interpreted by make
    x=$(( 255 & 2#11110000)); echo $$x

b: # escaped $
    x=$$(( 255 & 2#11110000)); echo $$x

(a), очевидно, не работает, и (b) тоже не работает:

$ make b
x=$(( 255 & 2#11110000)); echo $x
/bin/sh: 1: arithmetic expression: expecting EOF: " 255 & 2#11110000"

Какой возможный путь? Щедрое количество цитирования, обратной подписи и побега также не дало никаких результатов.

Ответы [ 2 ]

4 голосов
/ 16 марта 2020

добавить

SHELL = bash

в make-файл

1 голос
/ 16 марта 2020
$ cat Makefile

# Make variable (recommended)
x := $(shell bash -c 'echo $$((255 & 2\#11110000))')
$(info [$x])

# Shell variable (not recommended)
a:
    x=`bash -c 'echo $$((255 & 2#11110000))'`; echo $$x

Giving

$ make
[240]
x=`bash -c 'echo $((255 & 2#11110000))'`; echo $x
240

Не забывайте, что # вводит комментарий в make-файл!

Я рекомендую использовать make , а не shell объекты, где это возможно. Обычно оказывается чище. (Как говорит @ ens c, я - я использую bash везде в моих make-файлах: -).)

...