考虑到这一点 - 相当古怪 - makefile,通常是专门设计为清楚来说明一系列不一致,试图找到Make如何处理makefile中的引号和反斜杠的“规则”。 p>
所以,makefile:
prereq = \
\: \
\\: \
\\\: \
\\\\: \
\\\\\: \
\\\\\\:
all: % : $(prereq)
@echo '$+'
%:;
跑步,我明白了:
: \\: \: \\\\: \\: \\\\\\:
现在,我们来看看。
我们基本上有6个先决条件:
\:
\\:
\\\:
\\\\:
\\\\\:
\\\\\\:
其中Make分别解释 ,如:
:
\\:
\:
\\\\:
\\:
\\\\\\:
你在这看到一个模式吗?确定有。
对于任何偶数反斜杠,请使用全部反斜杠字面,这样\\:
仍为{{ 1}}。 \\:
仍为\\\\:
。最后:\\\\:
仍为\\\\\\:
。根本没有逃避或任何解释。
对于任何奇数反斜杠,请将删除一半。确切地说,它是整数除法的一半,其中Make删除1为3,2为5.一个小的扭曲,1反斜杠,Make删除1反斜杠。因此\\\\\\:
变为\:
,:
变为\\\:
,\:
变为\\\\\:
。
现在,确定它必须有用,这使得制造用于去除反斜杠的所有“理论”变得困难。
但是,它是什么?