您的makefile不包含实际目标。您只定义了一个模式规则,告诉如何构建匹配模式的目标。但是make并不会在文件系统上寻找可以匹配模式的目标,它只会针对特定请求的目标检查模式。
您的makefile中没有列出任何特定目标(文件),因此唯一可以了解目标的方法是如果您在目标线上构建目标。
您正在使用%
特殊令牌从vim内运行此命令,该令牌展开为当前正在编辑的文件的名称。这意味着您正在运行命令:
make test1.cob
因为您正在编辑文件test1.cob
。所以,你告诉make“请尝试创建目标(文件)test1.cob
”。但是,该文件已经存在(这是您正在编写的文件)。所以说,“无事可做”。
如果你运行make,并要求它来创建你真的想要创建的目标,它会工作:
现在文件test1
不存在,并可以找到一个知道如何图案规则建立它,所以使得将运行该规则。
或者,你可以编辑你的Makefile添加的特定目标,如:
COBCWARN = -W
test1: test1.cob
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
然后你就可以运行在所有make
不带参数。没有任何命令行参数,make会在makefile中查找显式目标,并将test1
作为第一个。它看到有一个与该目标相匹配的规则(模式规则),所以它会构建该目标。
UPDATE
如果你想允许一个简单的命令make
建立多个程序,写你的makefile是这样的:
COBCWARN = -W
all: test1 test2 test3
.PHONY: all
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
现在从VIM,你就可以说:!make
,就是这样。
如果您运行make
没有参数,那么它会在makefile中找到第一个显式目标并构建它。在这个例子中,第一个目标是all
,它的先决条件是可能的程序。构建每一个make都会看到它可以应用模式规则,所以它会这样做(如果.cob
文件自上次构建该程序以来已被修改)。
你运行什么命令来调用make?上面的makefile不完整:它本身不会执行任何操作。 – MadScientist 2014-12-06 14:12:44
@MadScientist:我正在使用Vim。我正在使用':make%'来编译。我应该将哪些内容放入makefile才能使其工作? – Joydeep 2014-12-06 15:30:30