2012-08-09 356 views
1

我遇到了一个问题,我整个上午都在打我的脑袋。我是修改makefile的新手,所以我遇到了一个我不知道如何解决的问题。我试图通过目录搜索任何以'Findings!'结尾的以'Findings.txt'结尾的文件。包含在里面。出于某种原因,我无法让我的条件声明正常工作。我假设它可能与通配符有关,但我试过的所有东西都不起作用,包括wilcard功能。我唯一的想法是shell可能在路径中有一个变量。使用shell命令的Makefile grep

GREP_FINDINGS := $(shell grep 'No Findings' $(C_DIR)/*Findings.txt) 

我想条件化grep结果的输出,但我做错了什么。

ifeq ($(GREP_FINDINGS),) 
    @echo "Nothing was found for current build"  
else 
    @echo "***Found string in Findings.txt***" 
endif    
+0

您使用什么版本的Make? (如果您不确定,请尝试'make -v'。)'GREP_FINDINGS'是否包含您认为应该的内容?您的条件声明如何出错?当'GREP_FINDINGS'中有东西时,它是否需要第一个分支,还是当第二个分支不存在时? – Beta 2012-08-09 16:20:57

+0

我在unix中使用GNU make 3.8和tcsh。在目前的形式下,它不会触发第一个分支,总是需要第二个分支。我只对这个条件使用GREP_FINDINGS,所以我认为它包含我想要的,因为我事先在控制台中测试了命令。我仍然在学习。我总是假设grep返回一个零输出,如果它发现了字符串,否则返回非零。非常感谢! – 2012-08-09 17:08:03

+0

这看起来不像有效的Make代码(例如括号不平衡);你能剪切并粘贴实际的代码吗? – Beta 2012-08-09 17:23:46

回答

1

Makefile文件通常是大小写敏感的,所以你需要使用ifeqelse,下面的作品在这里与GNU品牌:

ifeq ($(GREP_FINDINGS),) 
    @echo true 
else 
    @echo false 
endif 

您还可能要检查this出来。

+0

我刚刚更新了我的实际代码,因为在我从内存中输入手机之前。我实际上已经在使用条件,它仍然跳过第一个分支。 – 2012-08-09 17:46:42

+2

@MattCzarniak,尝试从这个答案中切割并粘贴ifeq行 - 我想你已经省略了一个空格。 – Beta 2012-08-09 17:49:13

+0

好的。我无法相信我没有注意到这个空间。有趣的是,我添加了这个空间,它激活了条件的第一个分支,这正是我想要发生的事情。但是,我将我用于grep的字符串切换为'blah',它不包含在我的任何Findings文件中,并且它也返回第一个分支。是否有可能Makefile中其他位置的语法错误可能导致它表现得有趣?感谢大家的帮助 – 2012-08-09 18:13:01