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.cobMsgstr "Но этот файл уже существует (это файл, который вы пишете). Так что 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 файл был изменен с момента последней сборки программы).

Другие вопросы по тегам