make: *** Нет правила для создания цели «все». Остановка

#gcc #makefile

#gcc #makefile

Вопрос:

Я работаю над заданием класса из курса машинного обучения. Нам предоставляется файл hmm.tar, который содержит реализацию скрытых марковских моделей на c .

В файле read me было дано следующее.

Для компиляции и тестирования программы,

1) извлеките код:

 tar -xf hmm.tar
  

2) скомпилируйте программы:

 make all
  

на втором шаге вывод из терминала make: *** No rule to make target 'all'. Stop

Я использую ОС windows10 и запускаю терминал cygwin.

Пожалуйста, помогите мне разобраться с этой проблемой. Вот файл Makefile

Комментарии:

1. Каково было содержимое tarfile. Содержит ли он makefile и содержит ли этот makefile цель ‘all’?

2. @RobertKock У него есть Makefile. Я отредактировал вопрос, чтобы добавить содержимое Makefile

3. Является ли Makefile таким длинным? Прокси запрещает pastebin здесь (и через несколько месяцев ссылка может быть разорвана).

4. попробуйте «make -f Makefile» и сообщите нам результат.

5. $ make -f Makefile make: Makefile: No such file or directory make: *** No rule to make target 'Makefile'. Stop. Это вывод make -f Makefile

Ответ №1:

Я предполагаю, что в файле tar есть файлы внутри подкаталога. Вероятно, вам просто нужно убедиться, что вы находитесь в каталоге, в котором есть Makefile, а затем запустить make:

 tar -xf hmm.tar
cd __somewhere_
make all
  

чтобы помочь вам узнать, где находится Makefile, вы можете использовать:

 tar tf hmm.tar | grep -i makefile
  

Комментарии:

1. Спасибо за ответ, но вывод терминала krish@DESKTOP-5KVRRBS /cygdrive/c $ tar -xf hmm-1.04.tar.gz krish@DESKTOP-5KVRRBS /cygdrive/c $ cd hmm-1.04 krish@DESKTOP-5KVRRBS /cygdrive/c/hmm-1.04 $ make all make: Nothing to be done for 'all'.

2. Это выглядит как ошибка, отличная от предыдущей. Возможно, вы могли бы сначала попробовать «очистить», а затем «сделать все». Другие вещи, которые нужно знать.. Я почти всегда извлекаю tar, используя -v, чтобы вы видели, какие файлы извлекаются «tar xvf hmm.tar». И вы можете указать несколько правил make вместе «очистить все».

3. Я попытался использовать «make clean» перед использованием make all. На удивление, это сработало. Можете ли вы сказать мне, почему это сработало?

4. «make all» пытается убедиться, что все, что требуется для цели «все», было построено. Из вашего Makefile это «train_hmm test_hmm generate_seq». Предположительно, эти файлы тоже были внутри файла tar. «очистить» удаляет эти файлы, чтобы при следующем запуске «сделать все» их нужно было перестроить.

Ответ №2:

Поскольку cygwin возвращается make: *** No rule to make target 'all'. Stop , кажется, что make он установлен правильно. Таким образом, это должны быть две другие вещи:

  • Либо файл make внутри .tar отсутствует, либо
  • в файле make присутствуют синтаксические ошибки

Комментарии:

1. Makefile присутствует внутри файла .tar. Это оставляет нас с синтаксическими ошибками в файле make