代码之家  ›  专栏  ›  技术社区  ›  vico

标签在Makefile中

  •  0
  • vico  · 技术社区  · 4 年前

    我有一个包含制表符行的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.
    

    为什么有些台词应该被禁止,而其他台词则不能?

    2 回复  |  直到 4 年前
        1
  •  2
  •   MadScientist    4 年前

    因为,这就是makefiles使用的语法。为什么必须在Python中缩进方法体?因为这就是语法。

    Makefiles在同一个文件中由两种不同的“语言”组成。不按TAB缩进的行是makefile格式。按TAB缩进的行是shell脚本。使用标签来区分两者。

    看见 the GNU make manual 了解更多信息。

        2
  •  0
  •   John Bollinger    4 年前

    为什么有些台词应该被禁止,而其他台词则不能?

    每个配方的每一行都必须以标签开头。每一行都是 食谱的一部分不应以标签开头。问题的关键在于,在示例makefile中 ifneq endif 指令不是配方的一部分。它们由 make ,在makefile解析期间,在运行配方时不会传递给shell。在某些方面,这与C预处理指令和周围源代码之间的区别是一样的。