在define中获取shell执行的退出代码

时间:2015-12-04 10:08:29

标签: shell makefile

我的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?

开始工作

1 个答案:

答案 0 :(得分:2)

  

我需要将代码放入定义中:

  1. 解析if()时会处理并评估endif / Makefile。您无法在变量定义中使用它们。

  2. 第一个代码段中的exit_code := ...make变量的定义,而在第二个代码段中,它只是一个字符串,是make' s的一部分名为run-python-script的变量。

  3. 您可以尝试此操作(为了测试目的,您的脚本将替换为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)是多余的。)