让我们假设出于这个问题的目的在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的更改。
答案 0 :(得分:2)
跨多个行执行复杂的配方操作是一种良好而合理的做法;但是调用Shell脚本的时间过长或过于复杂,则表明您做错了。也许将逻辑分解为一个单独的脚本,或者重新考虑您的方法。
例如,我将其重构为
install:
sha512sum --check SHA512SUM
: the rest of your exisiting install target here
如果缺少SHA512SUM
或实际检查失败,此操作将失败。
如果在发生这种情况时想要彩色的人类可读输出或动画仓鼠,请编写包装脚本。