如何根据grep结果对makefile进行条件化?

如何根据grep结果对makefile进行条件化?,makefile,grep,Makefile,Grep,我正在寻找一种方法,如果在检查工具版本时找不到某个字符串,就可以跳出makefile 我希望匹配的grep表达式是: dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28' 如果安装了正确版本的DPLU,则返回匹配行 如何基于此表达式将条件应用到makefile中?这里有一种方法: .PHONY: check_dplus check_dplus: dplus -VV | grep -q "build date and

我正在寻找一种方法,如果在检查工具版本时找不到某个字符串,就可以跳出makefile

我希望匹配的grep表达式是:

dplus -VV | grep 'build date and time: Nov  1 2009 19:31:28'
如果安装了正确版本的DPLU,则返回匹配行

如何基于此表达式将条件应用到makefile中?

这里有一种方法:

.PHONY: check_dplus

check_dplus:
    dplus -VV | grep -q "build date and time: Nov  1 2009 19:31:28"
如果grep没有找到匹配项,它应该给出

make: *** [check_dplus] Error 1
然后让您的其他目标依赖于check_dplus目标。

如果是,您可以这样做

 your-target: $(objects)
     ifeq (your-condition)
         do-something
     else
         do-something-else
     endif
请看这里

如果make不支持条件句,您可以随时这样做

 your-target:
     dplus -VV | grep -q "build date and time: Nov  1 2009 19:31:28" || $(MAKE) -s another-target; exit 0
     do-something

 another-target:
     do-something-else

以下是GNU Make中的另一种工作方式:

DPLUSVERSION = $(shell dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28') target_of_interest: do_things do_things_that_uses_dplus do_things: ... do_things_that_uses_dplus: ifeq ($(DPLUSVERSION),) $(error proper version of dplus not installed) endif ... DPLUSVERSION=$(shell dplus-VV | grep'构建日期和时间:2009年11月1日19:31:28') 感兴趣的目标:做你想做的事做你想使用的事 做事: ... 使用dplus进行以下操作: ifeq($(DPLUSVERSION),) $(错误:未安装DPLU的正确版本) 恩迪夫 ...
这个目标可以是真实的,也可以只是真实目标所依赖的虚假目标。

这是哪个品牌的?gnu?是的。特别是在Cygwin中,但这只是GNU。使用了一个符咒,而ifeq…$(错误…)让我发布一条错误消息,让开发人员知道他们的构建被终止的原因。警告<代码>$(错误)在计算时触发。这意味着,如果
DPLUSVERSION
触发错误条件,
do_things
将永远不会运行。编辑来解决这个问题@gcb:我认为你没有测试过你的解决方案。@Beta对,在尝试快速编辑时被冲昏头脑了。嗯,只是做了另一个快速编辑,没有考虑太多,再次:)如果
-j
大于1,它可能会运行出问题。。。但现在应该没问题了。