Makefile 中的制表符
Tab's in Makefile
我的 Makefile 包含制表符行 echo $(foo)
和非制表符行 ifneq (,$(findstring i, $(MAKEFLAGS)))
:
bar =
foo = $(bar)
all:
echo $(foo)
ifneq (,$(findstring i, $(MAKEFLAGS)))
echo "i was passed to MAKEFLAGS"
endif
如果我取消制表 echo $(foo)
我得到错误:
Makefile:5: *** missing separator. Stop.
为什么有些行应该制表,而另一些行则不需要?
因为,这是 makefile 使用的语法。为什么必须缩进 Python 中的方法体?因为那是语法。
Makefile 在同一个文件中包含两种不同的“语言”。没有 TAB 缩进的行是 makefile 格式。 TAB 缩进的行是 shell 脚本。 Make 使用 TAB 来区分两者。
有关详细信息,请参阅 the GNU make manual。
Why some lines should be tabified while other ones - not?
每个食谱的每一行都必须以制表符开头。 不是 食谱一部分的每一行都不应该以制表符开头。问题的症结在于,在示例 makefile 中,您的 ifneq
和 endif
指令不是配方的一部分。它们在 makefile 解析期间由 make
处理,当配方为 运行 时不会传递给 shell。在某些方面,这与 C 预处理指令和周围源代码之间的区别相同。
我的 Makefile 包含制表符行 echo $(foo)
和非制表符行 ifneq (,$(findstring i, $(MAKEFLAGS)))
:
bar =
foo = $(bar)
all:
echo $(foo)
ifneq (,$(findstring i, $(MAKEFLAGS)))
echo "i was passed to MAKEFLAGS"
endif
如果我取消制表 echo $(foo)
我得到错误:
Makefile:5: *** missing separator. Stop.
为什么有些行应该制表,而另一些行则不需要?
因为,这是 makefile 使用的语法。为什么必须缩进 Python 中的方法体?因为那是语法。
Makefile 在同一个文件中包含两种不同的“语言”。没有 TAB 缩进的行是 makefile 格式。 TAB 缩进的行是 shell 脚本。 Make 使用 TAB 来区分两者。
有关详细信息,请参阅 the GNU make manual。
Why some lines should be tabified while other ones - not?
每个食谱的每一行都必须以制表符开头。 不是 食谱一部分的每一行都不应该以制表符开头。问题的症结在于,在示例 makefile 中,您的 ifneq
和 endif
指令不是配方的一部分。它们在 makefile 解析期间由 make
处理,当配方为 运行 时不会传递给 shell。在某些方面,这与 C 预处理指令和周围源代码之间的区别相同。