2013-03-22 14 views
8

W moim Makefile, mam pewien kod, który sprawdza połączenia sieciowe. Ten kod zajmuje przyzwoity czas i chciałbym go uruchomić tylko wtedy, gdy nie uda się zbudować innego celu.Czy plik Makefile może wykonywać kod TYLKO po wystąpieniu błędu?

Aktualny Makefile

all: files network 
    # compile files 

files: 
    # get files from network resources 

network: 
    # check for network connectivity 
    # echo and return an error if it's not available 

Realizacja zamówienia:

if not network: 
    # exit with error 
if not files: 
    # exit with error 
if not all: 
    # exit with error 

Pożądany Makefile

W powyższym przykładzie chciałbym cel network być "na miarę", tylko jeśli files cel nie zostanie "wykonany".

Realizacja zamówienia:

if not files: 
    if not network: 
     # exit with error 
if not all: 
    # exit with error 
+0

Czy na pewno chcesz, aby 'network' był oddzielnym celem? – Beta

+0

@ Beta, to niekoniecznie musi być. –

Odpowiedz

12

Recursive make jest Twój przyjaciel tutaj obawiam się.

.PHONY: all 
all: 
    ${MAKE} files || ${MAKE} network 

Jeśli make files powiedzie, twoja praca jest wykonywana, a kod wyjścia jest sukcesem. W przypadku niepowodzenia kod wyjścia jest następujący: make network.

Powiązane problemy