2017-02-06 15 views
1

Я использую Makefile для создания моего проекта на C++. Это немного раздражает, что иногда трудно узнать, была ли сборка успешной или она потерпела неудачу. Я хотел бы видеть четкое заявление в конце сборки, как в gradle.Makefile: print BUILD SUCCESSFUL или BUILD FAILED

Если сборка прошла:

BUILD SUCCESSFUL 

Если сборка не удалось:

BUILD FAILED 

Для положительного случая я нашел это решение:

all: dependencies #every job is done in dependencies 
    echo "BUILD SUCCESSFUL" 

Что такое лучший способ сделать это?

+0

Я думаю, что 'c' и' 'C++ флаги вне темы для этого вопроса. – yeputons

+0

@kaylum В соответствии с [GNU make manual] (https://www.gnu.org/software/make/manual/make.html#Errors) make должен прекратить обработку рецепта, если 'do something' терпит неудачу. Если я не ошибаюсь. –

+0

На самом деле я делаю все в зависимости, и единственной целью в этом правиле является эхо. Я соответствующим образом меняю вопрос. –

ответ

2
  • Общим принципом Unix (или любой командной строки, действительно) является «если все хорошо, будьте спокойны». Конечно, сделайте сам (и make-файлы, написанные обычными способами) уже нарушаете это правило влево и вправо, но это все еще хорошая рекомендация ...
  • Программы командной строки Unix обмениваются успехом/неудачей, используя статус выхода, поэтому в терминале вы можете просто сделать echo $? сразу после вызова Make. 0 - это успех, ничего другого.
  • Независимо от эстетических точек выше, получение Make сделать что-то надежно в случае сбой сложно, потому что он не предназначен для этого. Это значительно проще обернуть Make вызов с помощью сценария оболочки, вдоль линий:
 
#!/bin/sh 

if make "[email protected]"; then 
    echo BUILD SUCCESSFUL 
else 
    echo BUILD FAILED 
fi