如果找到某个文件,如何生成构建错误

时间:2011-09-07 13:52:46

标签: shell makefile

如果在当前目录中找到与特定模式匹配的一个或多个文件,我想生成构建错误。

为了说明,我的make文件目标目前如下所示:

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 个答案:

答案 0 :(得分:2)

您可以使用shell的test命令来测试find命令的输出是否为空。如果find返回某些内容,这将发出失败状态(!= 0)。

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

答案 1 :(得分:1)

其中一种可能的方法是使用find计算从wc返回的文件,如果计数大于零,则使用您选择的错误编号调用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将退出错误make: *** [generate-java] Error 3
您可以将退出错误代码作为您选择的编号,并且echo语句也是您选择的问题。