kal*_*den 14 makefile gnu-make
以下是一个非常简单的makefile,似乎无法正常工作.
TEST=ON
buildbegin:
ifeq ($(TEST),ON)
@echo TEST PASSED
else
@echo TEST FAILED
endif
Run Code Online (Sandbox Code Playgroud)
无论我将TEST变量设置为什么,我的ifeq语句都会通过.我总是看到TEST PASSED.谁知道我在这里做错了什么?
编辑:
好.我的例子并不准确.我实际拥有的是:
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
Run Code Online (Sandbox Code Playgroud)
运行make all或make all_debug将导致打印"PASSED".如果我在条件之前回显$(TEST),看起来我的规则正在改变变量,但ifeq只能看到默认值.
pmo*_*mod 34
make在读取makefile时评估条件(如你所知它使用2遍),请参阅:Makefile的条件部分.你可以通过使用警告(这是调试makefile的好东西)来检查这个:
buildbegin:
@echo $(TEST)
$(warning now we reached ifeq TEST=$(TEST))
ifeq ($(TEST),ON)
@echo PASSED
else
@echo FAILED
endif
Run Code Online (Sandbox Code Playgroud)
您应该使用shell命令,并将它们包含在规则中:
buildbegin:
@if [ "$(TEST)" = "ON" ]; then echo "PASSED"; else echo "FAILED"; fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29222 次 |
| 最近记录: |