【问题标题】:GNU Makefile macro rulesGNU Makefile 宏规则
【发布时间】:2012-03-31 16:39:29
【问题描述】:

在 GNU Makfiles 中,宏定义之前可以有前导空格吗?以及允许使用什么类型的空格(制表符、换行符、空格...)

谢谢!

【问题讨论】:

    标签: makefile whitespace gnu space


    【解决方案1】:

    宏的名称前可以有任意数量的空格;它被忽略了。

    在大多数情况下,空格可以由空格和制表符组成。

    有一个例外:如果您在“规则上下文”中,则该行的第一个字符不能是 TAB(如果是,则该行被认为是规则配方的一部分,而不是进行宏赋值)。

    “规则上下文”的定义令大多数人感到惊讶:请注意,未采用的 cmets、空行,甚至 ifdef 部分都不会结束“规则上下文”:以 TAB 开头的行仍然是被认为是上一条规则的一部分。只有出现新的宏分配(或新规则)才会结束之前的规则。

    例如:

    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
    

    (假设这里的缩进以 TAB 开头而不是空格)“FOO”的最后一个赋值是在规则上下文中,将被视为“foo”配方的一部分,而不是新的宏赋值。

    总而言之,最好永远不要在 makefile 中使用 TAB,除非它引入了配方行。

    【讨论】:

      【解决方案2】:

      经过大量搜索:

      来自 GNU make:

      “变量名可以是任何不包含‘:’、‘#’、‘=’或前导或尾随空格的字符序列。”

      【讨论】:

      • 实际上,一个变量名可以包含任何字符,只要你在赋值中没有不加修饰的空格(即name := text with spaces,然后${name} := text工作, 而${text with spaces} 将适当地展开)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多