Сделать игнорировать ошибки: в чем разница между -i и -k - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу, чтобы make продолжался, даже если сборка зависимости не удалась.Я обычно использую -i для достижения этой цели.Мой коллега сказал, что он использует -k.Действительно, на этот вопрос о переполнении стека есть ответ для каждого:

Создать: как продолжить работу после сбоя команды?

Есть ли разница между этими двумя вариантами?

Вот что говорит справочная страница make для этих двух опций:

   -i, --ignore-errors
        Ignore all errors in commands executed to remake files.

   -k, --keep-going
        Continue as much as possible after an error.  While the 
        target that failed, and those that depend on it, cannot be 
        remade, the  other  dependencies of these targets can be 
        processed all the same.

То, что описывает -k, - это то, что, по моему мнению, -i делает.Я уверен, что что-то упустил: кто-то может помочь мне понять разницу?

1 Ответ

0 голосов
/ 22 декабря 2018

Рассмотрим этот make-файл:

all: fail success

all success:
        @echo $@

fail:
        exit 1
        @echo $@

Теперь запустите с двумя флагами:

$ make -i
exit 1
make: [Makefile:7: fail] Error 1 (ignored)
fail
success
all

Этот флаг заставил make делать вид, что конкретная команда рецепта выполнена успешно, даже если она не удалась.Таким образом, цель all все еще выполняется, поскольку make считает, что цель fail действительно выполнена успешно.Это эквивалентно добавлению - в начале каждой строки рецепта.

В отличие от:

$ make -k
exit 1
make: *** [Makek:7: fail] Error 1
success
make: Target 'all' not remade because of errors.

Здесь make знает, что цель fail не была построена.success запускается из-за -k: это не зависит от fail.Тем не менее, all не построен, потому что он зависит от fail.

Мне на самом деле никогда не было нужно -i;мне это кажется опасным.

С другой стороны, я использую -k почти по умолчанию.

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