GNU Makefile宏规则
在GNU文件中,宏定义前是否有前导空格?什么类型的空白是允许的标签,换行符,空格GNU Makefile宏规则,makefile,whitespace,gnu,space,Makefile,Whitespace,Gnu,Space,在GNU文件中,宏定义前是否有前导空格?什么类型的空白是允许的标签,换行符,空格 谢谢 经过大量搜索后: 来自GNU make: 变量名可以是不包含“:”、“,”=”或前导或尾随空格的任何字符序列。经过大量搜索后: 来自GNU make: 变量名称可以是不包含“:”、“,”=”或前导或尾随空格的任何字符序列。宏名称前可以有任意数量的空格;它被忽略了 在大多数情况下,空白可以由空格和制表符组成 有一个例外:如果您在规则上下文中,则行的第一个字符不能是制表符(如果是),则该行被视为规则配方的一部分,
谢谢 经过大量搜索后: 来自GNU make:
变量名可以是不包含“:”、“,”=”或前导或尾随空格的任何字符序列。经过大量搜索后: 来自GNU make:
变量名称可以是不包含“:”、“,”=”或前导或尾随空格的任何字符序列。宏名称前可以有任意数量的空格;它被忽略了 在大多数情况下,空白可以由空格和制表符组成 有一个例外:如果您在规则上下文中,则行的第一个字符不能是制表符(如果是),则该行被视为规则配方的一部分,而不是make宏赋值 规则上下文的定义令大多数人感到惊讶:请注意,注释、空行,甚至未使用的ifdef部分都不会结束规则上下文:以制表符开头的行仍然被视为前一个规则的一部分。只有新宏分配或新规则的出现才会结束上一个规则 例如:
foo: bar
@cp $< $@
# now we have some comments
ifeq (true,false)
BAR := and an assignment that is not parsed
endif
# and some more comments
FOO = and a macro starting with TAB + space
假设此处的缩进以制表符而非空格开始,则最后一次分配的FOO在规则上下文中,将被视为FOO配方的一部分,而不是新的宏分配
总之,最好不要在makefile中使用制表符,除非它引入了配方行。宏的名称前可以有任意数量的空白;它被忽略了 在大多数情况下,空白可以由空格和制表符组成 有一个例外:如果您在规则上下文中,则行的第一个字符不能是制表符(如果是),则该行被视为规则配方的一部分,而不是make宏赋值 规则上下文的定义令大多数人感到惊讶:请注意,注释、空行,甚至未使用的ifdef部分都不会结束规则上下文:以制表符开头的行仍然被视为前一个规则的一部分。只有新宏分配或新规则的出现才会结束上一个规则 例如:
foo: bar
@cp $< $@
# now we have some comments
ifeq (true,false)
BAR := and an assignment that is not parsed
endif
# and some more comments
FOO = and a macro starting with TAB + space
假设此处的缩进以制表符而非空格开始,则最后一次分配的FOO在规则上下文中,将被视为FOO配方的一部分,而不是新的宏分配
总之,最好不要在makefile中使用制表符,除非它引入了一个配方行。实际上,变量名可以包含任何字符,只要赋值中没有未加修饰的空格,即name:=带空格的文本,那么${name}:=文本可以工作,而${text带空格}将适当展开。实际上,变量名可以包含任何字符,只要赋值中没有未加修饰的空格,即name:=带空格的文本,则${name}:=文本将起作用,${text with spaces}将适当展开。