Rm -rf по сравнению с -rm -rf

В Makefile я читаю:

-rm -rf (вместо rm -rf). Что означает первый "-" в начале строки в Makefile?

Ответ 1

Это означает, что make сам будет игнорировать любой код ошибки из rm.

В makefile, если какая-либо команда не выполняется, процесс make сам прекращает обработку. Префикс ваших команд с помощью -, вы уведомляете make о том, что он должен продолжать обработку правил независимо от результата команды.

Например, правило make файла:

clean:
    rm *.o
    rm *.a

не удалит файлы *.a, если rm *.o возвращает ошибку (если, например, не удаляются файлы *.o). Использование:

clean:
    -rm *.o
    -rm *.a

исправит эту конкретную проблему.


Кроме того: хотя это, вероятно, не нужно в вашем конкретном случае (поскольку флаг -f не позволяет rm возвращать ошибку, когда файл не существует), все же хорошей практикой явным образом отмечать строку в makefile - rm может возвращать другие ошибки при определенных обстоятельствах, и это делает ваше намерение понятным.