2012-08-09 352 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