Verilog?
То, что я сделал в подобной ситуации, и это может быть моей собственной ошибкой новичка / инженера-электрика, это:
compile.summary: compile.log
@echo Making $@
@grep -q PASSES $<
@echo Compile PASSES > $@
Поскольку grep -q
потерпит неудачу, если 'PASSES' отсутствует в compile.log, Make остановится.
Вы просто делаете elaborate
зависимым от compile.summary
.
Если вы искалидля чего-то вроде '* E' или 'Error' вы могли бы вместо этого использовать grep -qv 'Error'
, где '-v' заставит grep вернуть ошибку, если найдет строку в compile.log.
Это невсе это удобно для пользователя, хотя. В случае сбоя вы просто увидите «Создание файла компиляции» с последующим ... ничем.
В моем случае это было фактически связано с программами, которые никогда не возвращают 0, поэтому журналы должны бытьgrepped для допустимых сбоев по сравнению с фатальными сбоями.
По мере того, как приходит другой ответ, намного проще управлять зависимостями с реальными файлами в качестве целей. Цель компиляции PHONY может означать, что вы всегда перекомпилируете при разработке ... потому что у нее нет файла + отметка времени, чтобы узнать свежесть последней компиляции по сравнению с входными данными для компиляции. Лучше, чтобы compile.log был фактическим файлом, от которого зависит сложность.