我的makefile中有这样的东西:
exit_code := $(shell some_script.py; echo $$?)
ifneq ($(exit_code),0)
$(error Error occured)
endif
并且它正常工作 - echo $$?
返回python脚本的退出代码
我需要将代码放入定义中:
define run-python-script
exit_code := $(shell some_script.py; echo $$?)
ifneq ($(exit_code),0)
$(error Error occured)
endif
endef
$(call run-python-script)
但是exit_code
不包含退出代码。并且始终执行$(error Error occured)
。
如何使用define?
开始工作答案 0 :(得分:2)
我需要将代码放入定义中:
解析if()
时会处理并评估endif
/ Makefile
。您无法在变量定义中使用它们。
第一个代码段中的exit_code := ...
是make
变量的定义,而在第二个代码段中,它只是一个字符串,是make
' s的一部分名为run-python-script
的变量。
您可以尝试此操作(为了测试目的,您的脚本将替换为false
):
eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
the-command = false; echo $$?
run-python-script = $(if $(call eq,0,$(shell $(the-command))),,$(error Error occured))
$(run-python-script)
(在这种情况下$(call)
是多余的。)