Вам нужно добавить ./
, чтобы сообщить JavaScript Модуль, который вы ищете, можно найти по следующему пути к файлу относительно текущего файла. Поэтому вам нужно добавить ./
, чтобы сказать . Ищите sumfn.js
в текущем каталоге .
Поскольку цель, возможно, не была создана правильно. В следующий раз Вы make
проект, это попытается восстановить цель. Если файл не был удален, make
не имел бы никакого способа знать, что что-то пошло не так, как надо. make
не может знать, что отказ прибывал из теста, а не процесса, который создает цель.
Желательно ли это поведение в Вашем случае, зависит от природы тестов. Если Вы планируете фиксацию теста так, чтобы это не вызывало a Bus error
, удаление цели не является грандиозным предприятием. Если Вы захотите использовать цель для отладки позже, то необходимо будет внести изменение в Ваш делать процесс.
Один способ не удалить цели состоит в том, чтобы использовать .PRECIOUS
цель.
Другой мог бы быть:
$(tests): %: %.c
gcc -o $@ $(testflags) $<
-$@
Не протестированный, но документация указывает, что цель не будет удалена:
Тому, когда ошибка происходит, которые делают, не сказали проигнорировать, она подразумевает, что текущая цель не может быть правильно переделана, и ни один не может никакой другой, который зависит от нее любой прямо или косвенно. Никакие дальнейшие команды не будут выполняться для этих целей, так как их предварительные условия не были достигнуты.
и:
Обычно, когда команда перестала работать, если она изменила конечный файл вообще, файл повреждается и не может использоваться — или по крайней мере она не полностью обновляется. Все же метка времени файла говорит, что это теперь актуально, таким образом, в следующий раз делают выполнения, это не попытается обновить тот файл. Ситуация состоит все равно в том как тогда, когда команда уничтожается сигналом; посмотрите Прерывания. Таким образом, обычно правильный поступок должен удалить конечный файл если сбои команды с начала изменить файл. составьте завещание, делают это, если.DELETE_ON_ERROR появляется как цель. Это почти всегда, что Вы хотите, делают, чтобы сделать, но это не историческая практика; таким образом для совместимости, необходимо явно запросить это.
Один способ избежать этого поведения состоит в том, чтобы разделить сборку и выполнение теста в два шага:
tests := tests/test1 tests/test2 ...
test: $(tests) runtests
$(tests): %: %.c
gcc -o $@ $(testflags) $<
runtests: %.out: %
$< | tee $@
(Существуют, вероятно, ошибки в моем делать синтаксис, кто-либо не стесняется исправлять его.) Общее представление состоит в том, чтобы иметь тестовый прогон, генерируют выходной файл, который помогает make
запускать каждый тест индивидуально.
Это - поведение по умолчанию, делают. Когда команда возвращает код ошибки (например, ненулевой возврат) затем, сделать цель удалена..PRECIOUS и.IGNORE директивы make-файла могут изменить это поведение.