如果在当前目录中找到与特定模式匹配的一个或多个文件,我想生成构建错误。
为了说明,我的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
我认为我需要编写一个命令,以便在找到字符串时返回不同于零的退出状态。但是,我不知道该怎么做。有人可以帮忙吗?
答案 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语句也是您选择的问题。