0

我按以下方式构建了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 会引发错误,因为它没有可用的依赖项。但它没有。欢迎任何想法。

作为附加信息, DETARG1DEPTARG2虚假目标

BUILD_AGAIN 为 y 时的输出

BUILD_AGAIN is y
Building DEPTARG1
Building DEPTARG2

BUILD_AGAIN 为 n 时的输出

BUILD_AGAIN is n
make: Nothing to be done for `TARGET'.
4

1 回答 1

0

在条件中移动.PHONY:声明将消除此错误。

话虽如此,您似乎正在经历很多恶作剧来重新创建make内置的东西。编写或不编写食谱不是运行或不运行它们的方法。Make 有一个标志,make -B即使目标是最新的,也会强制重建。替换整个设置一个BUILD_AGAIN变量恶作剧只是运行或不运行该标志应该可以解决问题。

于 2016-12-30T12:47:46.877 回答