Makefile 通过覆盖构建变量共享一个目标
Makefile share a target by overriding build variable
我有一个 makefile,其中一部分如下所示:
.PHONY: all
all: master dispatcher
.PHONY: master
master: BUILDTARGET=master
master: buildbin ## Builds master
.PHONY: dispatcher
dispatcher: BUILDTARGET=dispatcher
dispatcher: buildbin ## Builds dispatcher
.PHONY: buildbin
buildbin:
@cd ${BUILD_FOLDER}/${BUILDTARGET} && ${MAKE} build GOBIN=${GOBIN}
LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}
请假设要设置 BUILD_FOLDER、GOBIN、LDFLAGS、CMD_FOLDER、PROJECT_ROOT。
问题是 运行 make 总是只构建 'master' 然后退出。
改变 'all' 的顺序,我发现它只构建了第一个。
上面的Makefile有什么问题。
你不能像这样使用依赖关系,buildbin
只是另一个目标,每次调用最多重制一次。您可以按如下方式解决此问题:
.PHONY: all master dispatcher
all: master dispatcher
master: BUILDTARGET=master
dispatcher: BUILDTARGET=dispatcher
master dispatcher:
@cd ${BUILD_FOLDER}/${BUILDTARGET} && ${MAKE} build GOBIN=${GOBIN} LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}
或者更简单地说
.PHONY: all master dispatcher
all: master dispatcher
master dispatcher:
@cd ${BUILD_FOLDER}/$@ && ${MAKE} build GOBIN=${GOBIN} LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}
我有一个 makefile,其中一部分如下所示:
.PHONY: all
all: master dispatcher
.PHONY: master
master: BUILDTARGET=master
master: buildbin ## Builds master
.PHONY: dispatcher
dispatcher: BUILDTARGET=dispatcher
dispatcher: buildbin ## Builds dispatcher
.PHONY: buildbin
buildbin:
@cd ${BUILD_FOLDER}/${BUILDTARGET} && ${MAKE} build GOBIN=${GOBIN}
LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}
请假设要设置 BUILD_FOLDER、GOBIN、LDFLAGS、CMD_FOLDER、PROJECT_ROOT。
问题是 运行 make 总是只构建 'master' 然后退出。 改变 'all' 的顺序,我发现它只构建了第一个。 上面的Makefile有什么问题。
你不能像这样使用依赖关系,buildbin
只是另一个目标,每次调用最多重制一次。您可以按如下方式解决此问题:
.PHONY: all master dispatcher
all: master dispatcher
master: BUILDTARGET=master
dispatcher: BUILDTARGET=dispatcher
master dispatcher:
@cd ${BUILD_FOLDER}/${BUILDTARGET} && ${MAKE} build GOBIN=${GOBIN} LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}
或者更简单地说
.PHONY: all master dispatcher
all: master dispatcher
master dispatcher:
@cd ${BUILD_FOLDER}/$@ && ${MAKE} build GOBIN=${GOBIN} LDFLAGS="${LDFLAGS}" CMD_FOLDER=${CMD_FOLDER}
@cd ${PROJECT_ROOT}