Как вставить новую строку в макрос внутри рецепта? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть такая цель:

curly:
    curl --header "Content-Type: application/json" --data \
    'data line 1 \
    data line 2' \
    ${URL}

Важно, чтобы две строки данных отображались отдельно, чтобы пользователю Makefile было легче увидеть, что происходит.

Это прекрасно работает. Но потом я хотел добавить вторую цель. Я не хочу дублировать данные, поэтому надеялся определить макрос и использовать его в обеих целях:

DATA = data line 1 \
       data line 2

curlier:
    curl --header "Content-Type: application/json" --data \
    '${DATA}' \
    ${URL2}

Это тоже не работает. Команда выполняется правильно, но при повторении рецепта строки данных запускаются вместе.

Я пробовал трюк, определяя макрос новой строки и вставляя его в строку DATA, но безрезультатно .

Я могу получить чистый результат, повторно вызвав make, но моему рецензенту это не нравится.

Есть другие предложения?

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вот что у меня получилось:

curly_URL    := http://somewhere
curlier_URL  := http://somewhere_else
CURL_URL     ?= ${$@_URL}
    
# Slightly unusual approach in order to keep the command-line output legible.
curly curlier:
    curl --header "Content-Type: application/json" --data \
    'data line 1 \
    data line 2' \
    ${CURL_URL}

H / T Pauli Nieminen

0 голосов
/ 10 июля 2020
define newln :=


endef

DATA := data line 1 \$(newln) data line 2

curlier:
        curl --header "Content-Type: application/json" --data \
        '${DATA}' \
        ${URL2}

Но, честно говоря, я бы попытался объяснить вашему рецензенту, что возня с технически лишними пробелами и символами новой строки в makefiles снижает качество make-файла, а не повышает его.

...