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
,或者实际检查失败,这将失败。
如果发生这种情况时您想要彩色的人类可读输出或动画仓鼠,请编写包装脚本。
让我们假设我们在 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
,或者实际检查失败,这将失败。
如果发生这种情况时您想要彩色的人类可读输出或动画仓鼠,请编写包装脚本。