Как вызвать ошибку сборки, если был найден определенный файл - PullRequest
0 голосов
/ 07 сентября 2011

Я хочу сгенерировать ошибку сборки, если в текущем каталоге найдены один или несколько файлов, соответствующих определенному шаблону.

Чтобы проиллюстрировать, моя цель создания файла на данный момент выглядит следующим образом:

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

Утилита swig генерирует классы Java для каждого класса C ++, с которым она сталкивается в исходном коде C ++. Однако, если он сталкивается с использованием класса 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 ]

2 голосов
/ 07 сентября 2011

Вы можете использовать команду test оболочки, чтобы проверить, является ли вывод вашей команды find пустым.Это выдаст состояние ошибки (! = 0), если find что-нибудь вернет.

generate-java:
        swig -c++ -java interface.i
        test -z "$(shell find -name 'SWIGTYPE_p.*\.java')"
1 голос
/ 07 сентября 2011

Одним из возможных способов может быть просто подсчет файлов, возвращаемых из find, с использованием wc и, если это число больше нуля, вызовите выход с номером ошибки по вашему выбору.
Например, ваше правило может быть:

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 снова являются вопросом вашего выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...