我的makefile结构如下。
.PHONY: DEPTARG1 DEPTARG2
$(info BUILD_AGAIN is $(BUILD_AGAIN))
TARGET: DEPTARG1 DEPTARG2
ifeq ($(BUILD_AGAIN),y)
DEPTARG1:
@echo Building $@
DEPTARG2:
@echo Building $@
endif
如果BUILD-AGAIN为n,我预计这个makefile会抛出一个错误,因为它没有可用的依赖项。但它没有。欢迎任何想法。
作为附加信息, DETARG1 和 DEPTARG2 是虚假目标。
BUILD_AGAIN is y
Building DEPTARG1
Building DEPTARG2
BUILD_AGAIN is n
make: Nothing to be done for `TARGET'.
答案 0 :(得分:0)
在条件中移动.PHONY:
声明可以消除此错误。
据说你似乎经历了很多恶作剧来重新创造make
内置的东西。编写或不编写食谱不是运行或不运行它们的方法。 Make有一个标志,即使目标是最新的,make -B
也会强制重建。将BUILD_AGAIN
变量shenanigans替换为带有或不带有该标志的整个设置应该可以解决问题。