как с помощью eval в команде makfile изменить значение макроса с помощью переменной bash - PullRequest
0 голосов
/ 20 января 2020

У меня есть функция bash внутри команды makefile, и я хочу изменить значение макроса. Возможно ли это?

C_DFLAGS :=

gui : 
    parse_flags () { echo $$1; for word in $$1; do if [ $${word::2} = -D ] ; then $(eval C_D_FLAGS+=$${word}); fi ; done ; } ; parse_flags "-D/test -D/TEST" 
    @echo "C_D_FLAGS :$(C_D_FLAGS)"

1 Ответ

1 голос
/ 20 января 2020

$(eval) будет интерпретироваться до фактического вызова функции bash. Вы не можете обновить make переменные из bash - это нисходящий процесс.

Однако код, который вы пытаетесь запустить, довольно просто заменить на собственный синтаксис, то есть:

$ cat Makefile
C_D_FLAGS :=

gui: C_D_FLAGS += -D/test -D/TEST
gui:
        @echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS: -D/test -D/TEST

Если флаги предоставлены откуда-то, их также можно отфильтровать, например:

$ cat Makefile
C_D_FLAGS :=

gui: C_D_FLAGS += $(filter -D%,$(EXTRA_FLAGS))
gui:
        @echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS:
$ make gui EXTRA_FLAGS="-Isomething -DFOO -m32"
C_D_FLAGS: -DFOO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...