OpenCobol Makefile

时间:2014-12-06 11:38:07

标签: makefile cobol

我正在尝试使用make编译OpenCobol程序。我总是得到" make:没有什么可以为test1.cob"做的。这是我的makefile。我在cobc之前放了一个TAB。但我仍然得到那个消息。请帮忙。 感谢。

COBCWARN = -W
%: %.cob
    cobc $(COBCWARN) -free -x $^ -o $@

这是我的cobol计划。

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST1.
PROCEDURE DIVISION.
   DISPLAY 'Hello world!'.
   STOP RUN.

1 个答案:

答案 0 :(得分:1)

您的makefile不包含实际目标。您只定义了一个模式规则,它告诉您如何构建与模式匹配的目标。但是make并没有在文件系统上寻找可以匹配模式的目标,它只针对特定请求的目标检查模式。

你的makefile中没有列出任何特定的目标(文件),因此如果你在目标命令行上建立目标,那么make可以了解目标的唯一方法就是。

您正在使用%特殊令牌从vim中运行此命令,该令牌会扩展为当前正在编辑的文件的名称。这意味着您正在运行命令:

make test1.cob

因为您正在编辑文件test1.cob。所以,你要告诉make"请尝试创建目标(文件)test1.cob"。但是,该文件已经存在(它是您正在编写的文件)。所以说"无事可做"。

如果你运行make并要求它创建你真正想要创建的目标,它将起作用:

make test1

现在文件test1不存在,make可以找到知道如何构建它的模式规则,因此make将运行该规则。

或者,您可以编辑makefile以添加特定目标,如下所示:

COBCWARN = -W

test1: test1.cob

%: %.cob
        cobc $(COBCWARN) -free -x $^ -o $@

然后你可以运行make而根本没有参数。如果没有任何命令行参数,make将在makefile中查找显式目标,并查找test1作为第一个。它看到有一个规则(模式规则)与该目标匹配,因此它将构建该目标。

更新

如果您想允许一个简单的命令make来构建多个程序,请编写这样的makefile:

COBCWARN = -W

all: test1 test2 test3
.PHONY: all

%: %.cob
        cobc $(COBCWARN) -free -x $^ -o $@

现在从vim你可以说:!make就可以了。

如果你运行make没有参数,那么它将在makefile中找到第一个显式目标并构建它。在此示例中,第一个目标是all,其先决条件是可能构建的程序。要构建每个make,make会看到它可以应用模式规则,因此它会这样做(如果自上次构建程序以来.cob文件已被修改)。