2011-09-07 39 views
0

如果在當前目錄中找到一個或多個匹配特定模式的文件,我想產生一個編譯錯誤。如果發現某個文件時如何產生編譯錯誤

爲了說明,我的makefile文件的目標目前看起來是這樣的:

generate-java: 
    swig -c++ -java interface.i 

swig工具生成它的C++源代碼中遇到的每個C++類的Java類。但是,如果遇到未找到定義的C++類的使用,它將生成一個虛擬類。虛擬類通常被命名爲SWIGTYPE_p_MyClass

如果發生這種情況,那麼我想將它視爲錯誤。因此,如果找到一個名爲SWIGTYPE_p*.java的文件或者包含字符串SWIGTYPE_p,那麼我希望構建失敗。

我想我需要構建目標更改爲成才這樣的:

generate-java: 
    swig -c++ -java interface.i 
    find . -name "SWIGTYPE_p.*\.java" --> generate build error if found 
    find . -name "*\.java" | xargs grep SWIGTYPE_p --> generate build error if found 

我想我需要編寫一個返回從零以防串中發現不同的退出狀態的命令。但是,我不知道該怎麼做。誰能幫忙?

回答

2

您可以使用shell的test命令來測試您的find命令的輸出是否爲空。如果查找返回某些內容,這將發出失敗狀態(!= 0)。

generate-java: 
     swig -c++ -java interface.i 
     test -z "$(shell find -name 'SWIGTYPE_p.*\.java')" 
1

一種可能的方式可以是僅計算使用wcfind返回的文件,如果計數與您所選擇的錯誤數大於零調用exit。
例如您的規則可能是:

generate-java:  
    swig -c++ -java interface.i && \ 
    if [ `find ./ -iname "SWIGTYPE_p.*\.java" | wc -l` -gt 0 ];then \ 
      echo "SWIGTYPE_p*.java found!!" && exit 3;  \ 
    fi 

如果有發現作將退出錯誤爲make: *** [generate-java] Error 3
任何文件,你可以有退出錯誤代碼爲您的選擇和echo語句的數量再次您選擇的事項。

相關問題