Почему делает GNU, делают, удаляют файл

Вам нужно добавить ./, чтобы сообщить JavaScript Модуль, который вы ищете, можно найти по следующему пути к файлу относительно текущего файла. Поэтому вам нужно добавить ./, чтобы сказать . Ищите sumfn.js в текущем каталоге .

12
задан 26 February 2009 в 00:21
поделиться

3 ответа

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


Желательно ли это поведение в Вашем случае, зависит от природы тестов. Если Вы планируете фиксацию теста так, чтобы это не вызывало a Bus error, удаление цели не является грандиозным предприятием. Если Вы захотите использовать цель для отладки позже, то необходимо будет внести изменение в Ваш делать процесс.

Один способ не удалить цели состоит в том, чтобы использовать .PRECIOUS цель.


Другой мог бы быть:

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

Не протестированный, но документация указывает, что цель не будет удалена:

Тому, когда ошибка происходит, которые делают, не сказали проигнорировать, она подразумевает, что текущая цель не может быть правильно переделана, и ни один не может никакой другой, который зависит от нее любой прямо или косвенно. Никакие дальнейшие команды не будут выполняться для этих целей, так как их предварительные условия не были достигнуты.

и:

Обычно, когда команда перестала работать, если она изменила конечный файл вообще, файл повреждается и не может использоваться — или по крайней мере она не полностью обновляется. Все же метка времени файла говорит, что это теперь актуально, таким образом, в следующий раз делают выполнения, это не попытается обновить тот файл. Ситуация состоит все равно в том как тогда, когда команда уничтожается сигналом; посмотрите Прерывания. Таким образом, обычно правильный поступок должен удалить конечный файл если сбои команды с начала изменить файл. составьте завещание, делают это, если.DELETE_ON_ERROR появляется как цель. Это почти всегда, что Вы хотите, делают, чтобы сделать, но это не историческая практика; таким образом для совместимости, необходимо явно запросить это.

14
ответ дан 2 December 2019 в 04:34
поделиться

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

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

test: $(tests) runtests

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

runtests: %.out: %
    $< | tee $@

(Существуют, вероятно, ошибки в моем делать синтаксис, кто-либо не стесняется исправлять его.) Общее представление состоит в том, чтобы иметь тестовый прогон, генерируют выходной файл, который помогает make запускать каждый тест индивидуально.

13
ответ дан 2 December 2019 в 04:34
поделиться

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

6
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: