В вашем файле makefile нет фактических целей. Вы определили только правило шаблона, которое сообщает, как создавать цели, соответствующие шаблону. Но make не ищет целевые объекты в файловой системе, которые могут соответствовать шаблону, он проверяет шаблон только на цели, которые были запрошены специально.
У вас нет каких-либо конкретных целей (файлов), перечисленных в вашем файле makefile, поэтому единственный способ make может узнать о цели, если вы даете цель быть построенной в командной строке.
Вы используете эту команду из vim, используя специальный токен , который расширяется до имени файла, который в настоящее время редактируется. Это означает, что вы запускаете команду:
make test1.cob
, потому что вы редактируете файл test1.cob
. Итак, вы говорите make «попробуйте создать цель (файл) test1.cob
». Но этот файл уже существует (это файл, который вы пишете). Поэтому make говорит «ничего не делать».
Если вы запустите сделать и попросить его, чтобы создать цель, которую Вы действительно хотите создан, он будет работать:
make test1
Теперь файл test1
не существует, и сделать можно найти шаблонное правило, которое знает, как для его создания, поэтому make будет запускать это правило.
В качестве альтернативы, вы можете отредактировать Makefile, чтобы добавить конкретную цель, например:
COBCWARN = -W
test1: test1.cob
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
Затем вы можете запустить make
без аргументов вообще. Без аргументов командной строки make будет выглядеть в make-файле для явных целей и найти test1
в качестве первого. Он видит, что существует правило (правило шаблона), которое соответствует этой цели, поэтому оно построит эту цель.
UPDATE
Если вы хотите, чтобы простая команда make
построить несколько программ, написать Makefile так:
COBCWARN = -W
all: test1 test2 test3
.PHONY: all
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
Теперь из Vim вы можете просто сказать :!make
и это все.
Если вы запустите make
без аргументов, то он найдет первую явную цель в make-файле и построит ее. В этом примере первая цель - all
, и ее предпосылками являются возможные программы для сборки. Для создания каждого из них make видит, что он может применить правило шаблона, и поэтому он сделает это (если файл .cob
был изменен с момента последнего создания программы).
Какую команду вы используете для вызова make?Вышеупомянутый make-файл не является полным: сам по себе он ничего не сделает. – MadScientist
@MadScientist: Я использую Vim. Я использую ': make%' для компиляции. Что мне следует добавить в make-файл, чтобы он работал? – Joydeep