gpt4 book ai didi

makefile - Makefile ifeq:何时评估?

转载 作者:行者123 更新时间:2023-12-03 21:08:21 25 4
gpt4 key购买 nike

以下是一个非常简单的makefile,似乎无法正常工作。

TEST=ON

buildbegin:
ifeq ($(TEST),ON)
@echo TEST PASSED
else
@echo TEST FAILED
endif


无论我将TEST变量设置为什么,我的ifeq语句都会通过。我总是看到测试通过。有人看到我在做什么错吗?

编辑:

好。我的例子并不完全正确。我实际上是这样的:

SHELL = /bin/sh

DEFAULT_TARGS:= all all_debug
DEBUG_TARGS:= all_debug
ALL_TARGS:= $(DEFAULT_TARGS) $(DEBUG_TARGS)

.PHONY: $(ALL_TARGS)
.PHONY: buildbegin

$(ALL_TARGS): buildbegin

TEST=ON

$(DEBUG_TARGS): TEST=OFF

buildbegin:
@echo $(TEST)
ifeq ($(TEST),ON)
@echo PASSED
else
@echo FAILED
endif


运行make all或make all_debug将导致打印“ PASSED”。如果我在条件之前回显$(TEST),则看起来好像我的规则正在更改变量,但是ifeq只能看到默认值。

最佳答案

当make读取一个makefile时,make评估条件语句(如您所知,它使用2次传递),请参见:Conditional Parts of Makefiles。您可以简单地通过使用警告来检查它(调试makefile是一件好事):

buildbegin:
@echo $(TEST)
$(warning now we reached ifeq TEST=$(TEST))
ifeq ($(TEST),ON)
@echo PASSED
else
@echo FAILED
endif


您应该改用shell命令,并将它们包括在规则中:

buildbegin:
@if [ "$(TEST)" = "ON" ]; then echo "PASSED"; else echo "FAILED"; fi

关于makefile - Makefile ifeq:何时评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com