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

Makefile:换行符/连续字符用法:`\`,是否可以接受?,makefile,line,gnu-make,Makefile,Line,Gnu Make,假设我们在Linux上使用GNU Make来解决这个问题 作为一个普通的shell脚本编写者,Makefile脚本对我来说似乎有点奇怪 不管怎么说,这是基于观点的,所以直接回答我的问题: 我找到了一种更像shell脚本编写makefile的方法 这是换行符/连续字符用法:\ 我的Makefile的开头示例: DESTDIR= 前缀?=/usr/local/bin 安装路径:=$(DESTDIR)$(前缀) 加密脚本:=encrypt-file-aes256 解密脚本:=解密文件aes256 发行

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

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

不管怎么说,这是基于观点的,所以直接回答我的问题:

我找到了一种更像shell脚本编写makefile的方法

这是换行符/连续字符用法:
\

我的Makefile的开头示例:

DESTDIR=
前缀?=/usr/local/bin
安装路径:=$(DESTDIR)$(前缀)
加密脚本:=encrypt-file-aes256
解密脚本:=解密文件aes256
发行版名称:=openssl加密
此文件:=$(lastword$(生成文件列表))
.冒牌货:支票
检查:$(加密脚本)$(解密脚本)
@t输出粗体;tputsetaf3;回波目标:$@;回声;tput sgr0
@如果[-f SHA512SUM];然后\
(sha512sum——检查sha512sum&&\
(tput bold;tput setaf 2;echo;echo“确定。您现在可以使用'sudo make install'或'(sudo)make install PREFIX=SomeDir'命令。”(tput sgr0)|\
(tput粗体;tput setaf 1;echo;echo“错误:文件哈希和不匹配!”;echo;tput sgr0;退出1)\
) \
否则\
$(MAKE)--file=$(这个文件)SHA512SUM\
fi
我是否完全越界了,或者这是一个可以接受的共同概念

为了避免基于意见的结束,请避免您的个人偏好,并引用来源


这里只是一段代码。您可以在没有这些更改的情况下找到整个Makefile。

跨多行中断复杂的配方操作是良好的做法;但是,对shell脚本的过长或复杂调用表明您做得不对。也许将逻辑分解成一个单独的脚本,或者重新思考您的方法

例如,我只需将其重构为

install:
    sha512sum --check SHA512SUM
    : the rest of your exisiting install target here
如果缺少
SHA512SUM
,或者实际检查失败,则此操作将失败


如果你想要彩色的人类可读输出或动画仓鼠,写一个包装脚本。

在多行中打破一个复杂的配方动作是一个好的、合理的做法;但是,对shell脚本的过长或复杂调用表明您做得不对。也许将逻辑分解成一个单独的脚本,或者重新思考您的方法

例如,我只需将其重构为

install:
    sha512sum --check SHA512SUM
    : the rest of your exisiting install target here
如果缺少
SHA512SUM
,或者实际检查失败,则此操作将失败


如果在这种情况下需要彩色的人类可读输出或动画仓鼠,请编写一个包装脚本。

为什么希望Makefile更像一个shell脚本?如果你想要的话,写一个shell脚本。
make
的目的是跟踪文件之间的依赖关系。另外,请不要在
Makefile
中撒上
@
。如果您发现输出干扰,请使用
make-s
;但是完全压制它会使调试变得困难和麻烦。请注意,规则中的每个命令本质上都是无效的。如果不满足其先决条件,则更好的设计是让
安装
失败。也许还可以了解
printf
。为什么希望Makefile更像一个shell脚本?如果你想要的话,写一个shell脚本。
make
的目的是跟踪文件之间的依赖关系。另外,请不要在
Makefile
中撒上
@
。如果您发现输出干扰,请使用
make-s
;但是完全压制它会使调试变得困难和麻烦。请注意,规则中的每个命令本质上都是无效的。更好的设计是,如果不满足其先决条件,则让
install
失败。还可以了解
printf