条件语句中的Makefile目标

时间:2012-09-18 14:05:34

标签: gnu-make

我的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为y

时的输出
BUILD_AGAIN is y
Building DEPTARG1
Building DEPTARG2

BUILD_AGAIN为n

时的输出
BUILD_AGAIN is n
make: Nothing to be done for `TARGET'.

1 个答案:

答案 0 :(得分:0)

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

据说你似乎经历了很多恶作剧来重新创造make内置的东西。编写或不编写食谱不是运行或不运行它们的方法。 Make有一个标志,即使目标是最新的,make -B也会强制重建。将BUILD_AGAIN变量shenanigans替换为带有或不带有该标志的整个设置应该可以解决问题。