Makefile: Line break / continuation character usage: `\`,普遍接受与否?

Makefile: Line break / continuation character usage: `\`, generally acceptable or not?

让我们假设我们在 Linux 上使用 GNU Make 来解决这个问题。

作为一名普通的 shell 脚本编写者,Makefile 脚本对我来说似乎有点 奇怪

无论如何,这是基于意见的,所以直接回答我的问题:

我发现一种方法 让我编写 Makefile 更像 shell 脚本。

作为换行符/续行符的用法:\

我的 Makefile 的示例开头:

DESTDIR ?=
PREFIX ?= /usr/local/bin
install_path := $(DESTDIR)$(PREFIX)
encrypt_script := encrypt-file-aes256
decrypt_script := decrypt-file-aes256
distrib_name := openssl-encryption
this_file := $(lastword $(MAKEFILE_LIST))

.PHONY: check

check: $(encrypt_script) $(decrypt_script)
    @tput bold; tput setaf 3; echo Target: $@; echo; tput sgr0
    @if [ -f SHA512SUM ]; then \
        ( sha512sum --check SHA512SUM && \
            ( tput bold; tput setaf 2; echo; echo "Ok. You may use 'sudo make install' or '(sudo) make install PREFIX=SomeDir' command now."; tput sgr0 ) || \
            ( tput bold; tput setaf 1; echo; echo "ERROR: Files hash sum mismatch!"; echo; tput sgr0; exit 1 ) \
        ) \
    else \
        $(MAKE) --file=$(this_file) SHA512SUM; \
    fi

我是完全越界了,还是在一般概念上可以接受?

为避免基于意见关闭,请避免您的个人喜好,并引用来源。

这里只是一小段代码。您可以找到没有这些更改的整个 Makefile .

将复杂的配方操作分解成多行是一种很好的做法;但是 shell 脚本的调用过长或过复杂表明您做错了。也许将逻辑分解为单独的脚本,或者重新考虑您的方法。

例如,我会简单地将其重构为

install:
    sha512sum --check SHA512SUM
    : the rest of your exisiting install target here

如果缺少 SHA512SUM,或者实际检查失败,这将失败。

如果发生这种情况时您想要彩色的人类可读输出或动画仓鼠,请编写包装脚本。