Это стандартное поведение make. Когда команда возвращает код ошибки (например, ненулевой возврат), тогда цель создания удаляется. Директивы make-файлов .PRECIOUS и .IGNORE могут изменить это поведение.

я есть слегка взломанный make-файл для запуска тестов:

### Run the tests

tests := tests/test1 tests/test2 ...

test: $(tests)

$(tests): %: %.c
    gcc -o $@ $(testflags) 
### Run the tests

tests := tests/test1 tests/test2 ...

test: $(tests)

$(tests): %: %.c
    gcc -o $@ $(testflags) $<
    $@
lt; $@

Это работает, но заставляет Make делать то, что я никогда раньше не видел. Мой тест в настоящее время не работает и вызывает ошибку шины. Make дает следующий вывод:

gcc -o tests/test1 [flags blah blah] tests/test1.c
tests/test1
make: *** [tests/test1] Bus error
make: *** Deleting file `tests/test1'

Мне любопытно насчет последней строки. Я никогда не видел, чтобы Make делал это раньше. Почему Make удаляет скомпилированный тест?

Примечание: я отредактировал этот пример довольно сильно, чтобы упростить его. Я мог бы внести некоторые ошибки.

Ответы на вопрос(2)

Ваш ответ на вопрос