首页 > 解决方案 > 如何在配方中的宏中嵌入换行符?

问题描述

我有一个这样的目标:

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 来获得干净的输出,但我的审阅者不喜欢这样。

还有其他建议吗?

标签: gnu-make

解决方案


这就是我最终的结果:

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 保利·涅米宁


推荐阅读