【发布时间】:2022-01-18 13:16:46
【问题描述】:
当我运行 makefile 时
SHELL=/bin/bash
a = False
ifeq ("", "")
a = True
endif
#b = False
#ifeq("","")
# b = True
#endif
#c = False
#if [ "" == "" ] \
#then \
# c = True \
#fi
#d = False
#if [[ "" == "" ]] \
#then \
# d = True \
#fi
all :
@\
echo a = $(a); \
echo b = $(b); \
echo c = $(c); \
echo d = $(d); \
\
c_loc=False; \
if [ "" == "" ]; \
then \
c_loc=True; \
fi; \
\
d_loc=False; \
if [[ "" == "" ]]; \
then \
d_loc=True; \
fi; \
\
echo c_loc = $${c_loc}; \
echo d_loc = $${d_loc}; \
我得到了输出
a = True
b =
c =
d =
c_loc = True
d_loc = True
在 Ubuntu 20.04 上使用 GNU Make 4.2.1 时,取消注释 if 语句 c 或 d 会导致错误 Makefile:n: *** missing separator. Stop.。 n 是 if 语句 c 或 d 的行号。
另一方面,如果我在带有 GNU Make3.81 的 Mac OS Big Sur v11.6.1 上运行相同的 makefile(if 语句 c 和 d 未注释),我会得到输出
a = True
b =
c = False
d = False
c_loc = True
d_loc = True
取消注释 if 语句 b 会导致两种设置中缺少分隔符错误。
我的问题:
- 为什么在一个设置中,如果语句 c 和 d 出现缺少分隔符错误,而在另一个设置中却没有?这是由于 GNU Make 3 和 GNU Make 4 之间的差异,还是 Ubuntu 和 MacOs 之间的差异?
- 为什么我在两个设置中都没有得到 if 语句 c 和 d 的 True 输出?我在哪里可以找到关于序言中使用的 shell 的信息?
【问题讨论】: