Makefile:换行符/连续字符用法:`\`,通常可以接受吗?

时间:2018-10-14 08:35:08

标签: makefile line gnu-make

让我们假设出于这个问题的目的在Linux上使用GNU Make。

作为一名常规的shell脚本编写者,Makefile脚本对我来说有点 odd

无论如何,这是基于观点的,直接针对我的问题:

我发现一种的方式来编写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,而无需进行here的更改。

1 个答案:

答案 0 :(得分:2)

跨多个行执行复杂的配方操作是一种良好而合理的做法;但是调用Shell脚本的时间过长或过于复杂,则表明您做错了。也许将逻辑分解为一个单独的脚本,或者重新考虑您的方法。

例如,我将其重构为

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

如果缺少SHA512SUM或实际检查失败,此操作将失败。

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