重用 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
我个人认为有更好的方法可以做到这一点,但是如果没有更多关于您真正需要满足的要求的信息,推测是没有用的。
我正在使用 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
我个人认为有更好的方法可以做到这一点,但是如果没有更多关于您真正需要满足的要求的信息,推测是没有用的。