代码之家  ›  专栏  ›  技术社区  ›  Vlastimil Burián

Makefile:换行符/延续符用法:`\`,是否可以接受?

  •  0
  • Vlastimil Burián  · 技术社区  · 6 年前

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

    作为一个普通的shell脚本编写器,Makefile脚本似乎有点 对我来说。

    对我来说,写makefile更像shell脚本。

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

    生成文件开头示例:

    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 回复  |  直到 6 年前
        1
  •  2
  •   tripleee    6 年前

    打破一个复杂的食谱行动跨多行是好的和合理的做法;但是,对shell脚本的调用过长或过于复杂,说明您做得不对。也许把逻辑分解成一个单独的脚本,或者重新考虑你的方法。

    例如,我只需将其重构为

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

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