【问题标题】:How do I check the exit status of a Makefile cmd.exe invocation?如何检查 Makefile cmd.exe 调用的退出状态?
【发布时间】:2014-08-28 13:17:37
【问题描述】:

我想在构建过程中检查 GIT 是否安装在 Windows 中,然后再进行处理。所以,这个想法是

check_git:
    git  > gitcheck

GIT_PRESENT = $(shell type gitcheck)

ifeq ($(findstring recognized, $(GIT_PRESENT)), recognized)  
#do nasty stuff
else
#do other stuff
endif

因为 cmd.exe 说:

Git 未被识别为内部或外部命令, 可运行的程序或批处理文件。

如果没有安装 Git,我只是想检查一下“recognized”关键字。

当然它不起作用,因为我意识到我必须检查退出状态,这是我在this 线程中读到的。

我正在使用 cs-make 3.81,这就是我首先生成文件的原因。 我意识到可能不存在这样做的“好”方式......另外,我对这些东西比较陌生,这是我的第一篇文章,所以要温柔。 谢谢!

【问题讨论】:

  • 您是试图控制基于此的目标规则行为还是基于此的实际制造级行为?
  • 我想生成一些状态标志,我将它们集成到我的源代码中,例如如果存在 GIT,则此标志将进入我的结构之一:' -D'GIT_FLAG=$(FLAG)' '
  • 那么那是根据 git 的存在进行级别更改吗?设置 make 变量以供以后使用?
  • 是的,看起来是这样!抱歉,我在理解您的语义时遇到了一些问题,因为我对此比较陌生,而且英语不是我的母语。
  • 试试GIT_PRESENT := $(shell git --help >nul 2>&1 & if %errorlevel% equ 0 ( echo GIT_PRESENT ) 看看是否适合你。当 git 存在时,应该将 $(GIT_PRESENT) 设置为 GIT_PRESENT,否则将其留空。如果 git 不在您的 %PATH% 中,那么您需要将路径放在该命令行上。

标签: windows makefile


【解决方案1】:

我相信GIT_PRESENT := $(shell git --help >nul 2>&1 & if %errorlevel% equ 0 ( echo GIT_PRESENT ) 会在找到 git 时将GIT_PRESENT 变量设置为“GIT_PRESENT”(在默认的 %PATH% 中,如果不在 %PATH% 中,请在调用中使用显式路径)。

【讨论】:

    【解决方案2】:

    好的,这就是我在 Etan 的慷慨帮助下所做的:

    GIT_PRESENT := $(findstring Git, $(subst \,$(space),$(shell echo %path%)))
    
    ifeq ($(GIT_PRESENT),Git)  
        git_info = Git detected!
        ver_num = $(lastword $(shell git tag))
    # and more nasty business...
    else
        git_info = Git not detected! Values below set to default.
        ver_num  := 0.00.000
    # and even more nasty business...
    endif
    

    当然,Git 必须包含在 %path% 中,但无论如何它是 Git 从 Windows cmd.exe 运行的先决条件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多