2012-04-20 41 views
0

我正在make一個makefile,我正在處理沒有依賴關係的目標,它檢查當前目錄中是否存在一個名爲README的文件,如果它存在,讀取它使用less或者退出exit:不要發生任何錯誤 - 如果是這種情況,運行目標的命令應該不會打印任何內容。使用Makefile的Word意外(期待「)」)

我已經嘗試了幾種不同的方法,但沒有什麼似乎工作(PAGER是一個簡單的無功等於):

read : 
    ifneq ("$(wildcard README)","") 
     [email protected]$(PAGER) README 
    endif 

而且也與此代碼

read : 
    [email protected] file in *;\ 
    do \ 
     if [ ${file} == "README" ]; then\ 
      $(PAGER) "README" ;\ 
     fi;\ 
    done 

隨着第一個塊我繼續得到類似於/ bin/sh的錯誤:語法錯誤:單詞意外(期待「)」),對於我的生活,我只是不明白它的意思。我當然不認爲有語法錯誤,也許我濫用make。

對於後面的代碼,我得到了一個意外的運算符錯誤==。

我也試着像這兩個單排的解決方案簡單的事情,但得到類似的錯誤:

[email protected] -a README && less README 
[email protected][ -a README ] && less README 

任何幫助將不勝感激。

編輯:我正在進一步挖掘,看到了一些有前途的東西,並明確地將我的外殼設置爲/ bin/bash(SHELL:=/bin/bash),但沒有骰子。

+0

@LubošTurek在刪除標籤之前,您應該檢查他們的wiki是如何使用它的。目前它提到'less'作爲UNIX命令的用法。見http://stackoverflow.com/tags/less/info – fedorqui 2017-05-03 08:17:17

回答

1
read: 
     @if [ -e README ]; then less README; fi 
+0

這解決了它。我有點好奇,爲什麼我所做的是拋出問題。它在功能上似乎與我相同,但==運算符顯然不會被類似地消化。 – Wuzseen 2012-04-20 06:29:50

+0

'''只是'test'命令。 'test'使用'='運算符進行等式比較,而不是'=='。 – 2012-04-20 06:37:12

+0

@Wuzseen,你的第一個解決方案對我來說沒有任何錯誤,但是說在README不存在的時候沒有任何事情要做(有一種方法可以解決這個問題)。如果你將'$'('$'=>'$$')加倍,你的第二個解決方案就可以工作,否則將「$ {」解釋爲無效,這一切都會分崩離析。你的第三和第四不工作,不應該。 – Beta 2012-04-20 06:48:30

1

您應該嘗試在單獨的* .sh文件中提取您的shell代碼,以便可以在makefile中將它們指定爲命令(並確保* .sh文件可執行)。

+0

這是一個好主意。我會給它一個鏡頭。 – Wuzseen 2012-04-20 06:23:04

+0

Beta爲我提供了一個在makefile中解決它的答案,但這非常有創意。但是,這可能違背了分配的規則。 – Wuzseen 2012-04-20 06:34:34