Makefile中的多行echo

4
我正在尝试在makefile中创建一个简单的C ++类生成器(根据给定的名称),但是当我不知道bash及其工作原理时,这真的很麻烦。
class:
    @echo "Type class name: "; \
    read CLASS_NAME; \
    echo Creating class called $${CLASS_NAME}; \
    echo "Class $${CLASS_NAME} {
    int x;
    int y;
    };">./$${CLASS_NAME}.h  

如何让最后一个echo起作用?我不知道如何同时输出多行。


1
只是出于好奇,您是否实际设置了 SHELL,以便在运行 shell 命令时启动 bash,还是使用 /bin/sh(默认情况下)? - Charles Duffy
我的错,应该是像你说的那样使用 shell。 - grubazhuberto
重复问题:使用GNU Make将多行变量输出到文件,我相信。引用的问题有一个优雅的解决方案。 - Victor Sergienko
1个回答

2

这里的反斜杠是由 make 解析的,而不是由其调用的 shell 解析的。(同样,make 会自行删除换行符,而不是将其传递给 shell)。

在此最简单的方法是使用 printf 格式字符串来插入新行,而不是尝试使它们成为字面量:

class:
        @echo "Type class name: "; \
        read CLASS_NAME; \
        echo "Creating class called $${CLASS_NAME}"; \
        printf '%s\n' "Class $${CLASS_NAME} {" 'int x;' 'int y;' '};' >"./$${CLASS_NAME}.h"

谢谢,伙计,这正是我想要的!说实话,我没想到我可以在这里使用printf。 - grubazhuberto
printfecho更具可移植性;请参阅POSIX echo标准中的“APPLICATION USAGE”部分,了解何时以及为什么要使用printf - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接