重用 Make 变量

Reuse a Make Variable

我正在使用 make 编译很多非常相似的目标文件,并想做类似于以下的事情:

BUILD_DIR := ./build/a
BUILD_DIRS += $(BUILD_DIR)

a:
    $(CC) $(BUILD_DIR)/file.c

BUILD_DIR := ./build/b
BUILD_DIRS += $(BUILD_DIR)

b:
    $(CC) $(BUILD_DIR)/file.c

问题是当我 运行

make a

BUILD_DIR 的值为 build/b。我预计它会是 build/a,make 什么时候解析变量名?有什么易于阅读的方法来做我想做的事吗?我尝试了 define/endef 但得到了相同的结果。

编辑:请注意,建议的答案 并不能真正解决这个问题。答案是使用特定于目标的变量。请注意,我还需要将变量与非目标特定变量一起使用:

BUILD_DIRS += $(BUILD_DIR)

如果变量是特定于目标的,我将无法像我想要的那样在目标之外使用它。

Etan 关于目标特定变量的回答 解决您的问题,您只需要意识到 :=(立即/简单)目标特定变量在分配时间,就像其他 := 变量一样。

所以,这会起作用:

# Force this to be a simple variable
BUILD_DIRS :=

BUILD_DIR := ./build/a
BUILD_DIRS += $(BUILD_DIR)

a: BUILD_DIR := $(BUILD_DIR)
a:
        $(CC) $(BUILD_DIR)/file.c

BUILD_DIR := ./build/b
BUILD_DIRS += $(BUILD_DIR)

b: BUILD_DIR := $(BUILD_DIR)
b:
        $(CC) $(BUILD_DIR)/file.c

我个人认为有更好的方法可以做到这一点,但是如果没有更多关于您真正需要满足的要求的信息,推测是没有用的。