Сделать аргументы: есть ли переменная, которая содержит их все? - PullRequest
0 голосов
/ 27 июня 2019

В make я могу определить файл следующим образом:

.PHONY: echo-foo

echo-foo:
    echo ${foo}

Использование:

make echo-foo foo=foo

Теперь предположим, что я хотел бы сделать следующее:

make echo-vars foo=foo bar=bar

И я начинаю с того, что пишу:

echo-vars:
   echo ${???}

Есть ли автоматически определенная переменная, которая будет выводить:

// either
foo=foo bar=bar

// or 
foo bar

Другими словами: есть ли MAKEARGS или какая-либо переменная вдоль этих линий, определенных как часть make env?

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

Для этого есть специальная переменная :

echo-vars:
    echo ${MAKEOVERRIDES}
1 голос
/ 27 июня 2019

.VARIABLES несколько близко.

Печатает только переменные командной строки:

test:
    echo "$(foreach VAR_NAME,$(.VARIABLES),\
        $(if $(filter command line,$(origin $(VAR_NAME))),$(VAR_NAME)))"
  • $(filter command line,$(origin VAR_NAME)) равно "command line", если это значение $(origin VAR_NAME), и пусто в противном случае. $(filter <needle>,<haystack>) является логическим тестом make для "<needle> is in or equals to <haystack> and is not empty".
  • $(if <condition>,<value>) возвращает <value>, если <condition> не пусто, в противном случае - пустая строка.
  • $(foreach VAR_NAME,SET,EXPRESSION) возвращает объединенный результат EXPRESSION, примененный к каждому элементу (10 пробелов) SET, где VAR_NAME заменяется каждым элементом SET.

Добавьте $(strip), чтобы избавиться от лишних пробелов.

...