Makefile 中几种等号的用法

1个回答

  • 这种方式叫做“简单展开”,因为在读到makefile中的这一行时等号右边就立即被展开了,等号右边引用的所有变量(如例子中的CC)也会被立即展开.其行为与一般编程和脚本语言相同.

    当等号右边引用的变量(如例子中的CC)还没有被定义时,它被展开成空(nothing)而不是空格之类.

    2.=运算符,如MAKE_DEPEND = $(CC) -M

    这种方式叫做“递归展开”,直到该变量被使用时等号右边的内容才会被展开,其实叫做“迟滞展开”更合适.神奇的是,这种展开方式可以不按顺序定义变量.比如:

    MAKE_DEPEND = $(CC) -M

    # Some time laterCC = gcc只要在此之前没有引用过MAKE_DEPEND就没问题.另外,不止是“迟滞展开”,事实上每次使用该变量,等号右边的内容都会被重新展开.

    3.=运算符,如OUTPUT_DIR = $(PROJECT_DIR)/out

    “追加”方式.其主要目的是给“递归展开”的变量追加内容.因为简单变量可以用simple := $(simple) new stuff的方式来追加内容;而对于递归展开的变量,recursive = $(recursive) new stuff会导致循环引用.这种情况只能用+=运算符.