Как я могу заставить make завершиться, если компиляция одной зависимости не удалась? - PullRequest
1 голос
/ 28 января 2010

Я разместил соответствующие биты моего make-файла. Когда я запускаю make all на этом make-файле, при компиляции debugosd.o возникает ошибка компиляции. Однако, поскольку make обнаружила ранее собранный debugosd.o, он просто продолжает сборку dialup.otz.

Не удаляя все .o, как я могу заставить debugosd.o устареть - и, таким образом, заставить make остановиться, как только он достигнет ошибки компиляции в debugosd.o?

Правило создания файлов .o:

%.o: %.c
    $(TITLE)
    $(CC) $(COMPILE) $(C_OPTIONS) -c $<

И фрагмент make-файла:

all: shared0.flw shared1.flw shared2.flw shared3.flw

debugosd.o: debugosd.c debugosd.h
xdialler_interface_new.o: xdialler_interface.h
dialup.ooo: xdialler_interface_new.o debugosd.o xDialler.a
    $(TITLE)
    $(MAKE_OOO)

dialup.otz: dialup.ooo  
    $(BIN)opress $< 

shared1.dir: dialup.otz 
    $(TITLE)
    $(BIN)dirbuild $(SHAREDDIR1_OPTIONS)

shared1.flw: shared1.dir 
    $(TITLE)
    $(BIN)flwbuild $(SHAREDFLW_OPTIONS1)

На самом деле, я понял, в чем проблема. Я заставлял перестраивать shared1.flw, используя фальшивую цель. Я думаю, что это вынудило make продолжить работу независимо от ошибок.

1 Ответ

1 голос
/ 28 января 2010

У вас нет конкретных подкоманд для debugosd.o, поэтому я предполагаю, что где-то используется значение по умолчанию (например, .c.o).

Команда make должна завершиться, если какая-либо из подкоманд возвращает ненулевой код завершения, , если команда не начинается с -. Проверьте фактическую команду, которая используется для цели dubugosd.o.

Не важно, есть ли ранее созданный файл, make не должен продолжаться после ошибки.

...