OpenCobol Makefile
Я пытаюсь скомпилировать программу OpenCobol, используя make. Я всегда получаю "make: Ничего не поделаешь для test1.cob". Вот мой make-файл. Я положил TAB перед cobc. Но все же я получаю это сообщение. Пожалуйста помоги. Благодарю.
COBCWARN = -W
%: %.cob
cobc $(COBCWARN) -free -x $^ -o $@
А вот и моя программа на Коболе.
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST1.
PROCEDURE DIVISION.
DISPLAY 'Hello world!'.
STOP RUN.
1 ответ
Ваш make-файл не содержит реальных целей. Вы определили только правило шаблона, которое сообщает make, как создавать цели, соответствующие шаблону. Но make не ищет целевые объекты в файловой системе, которые могут соответствовать шаблону, он только проверяет шаблон по целевым объектам, которые были специально запрошены.
У вас нет никаких конкретных целей (файлов), перечисленных в вашем make-файле, поэтому единственный способ, которым make может узнать о цели, - это если вы дадите цель, которая будет создана в командной строке.
Вы запускаете эту команду из vim, используя %
специальный токен, который расширяется до имени редактируемого файла. Это означает, что вы запускаете команду:
make test1.cob
потому что вы редактируете файл test1.cob
, Итак, вы говорите make ", пожалуйста, попробуйте создать цель (файл) test1.cob
Msgstr "Но этот файл уже существует (это файл, который вы пишете). Так что make говорит" ничего не делать ".
Если вы запустите make и попросите его создать цель, которую вы действительно хотите создать, она будет работать:
make test1
Теперь файл test1
не существует, и make может найти шаблонное правило, которое знает, как его построить, поэтому make запустит это правило.
Кроме того, вы можете отредактировать ваш make-файл, добавив конкретную цель, например:
COBCWARN = -W
test1: test1.cob
%: %.cob
cobc $(COBCWARN) -free -x $^ -o $@
Тогда вы можете запустить make
без аргументов вообще. Без каких-либо аргументов командной строки, make будет искать в make-файле явные цели и находить test1
как первый. Он видит, что существует правило (шаблонное правило), которое соответствует этой цели, поэтому он будет создавать эту цель.
ОБНОВИТЬ
Если вы хотите разрешить простую команду make
чтобы собрать несколько программ, напишите свой make-файл так:
COBCWARN = -W
all: test1 test2 test3
.PHONY: all
%: %.cob
cobc $(COBCWARN) -free -x $^ -o $@
Теперь из VIM вы можете просто сказать, :!make
и это все.
Если вы бежите make
без аргументов он найдет первую явную цель в make-файле и создаст ее. В этом примере первая цель all
и его предпосылками являются возможные программы для построения. Для сборки каждый make видит, что он может применять правило шаблона, и поэтому он сделает это (если .cob
файл был изменен с момента последней сборки программы).