Это стандартное поведение 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 удаляет скомпилированный тест?
Примечание: я отредактировал этот пример довольно сильно, чтобы упростить его. Я мог бы внести некоторые ошибки.