如何创建一个makefile来调用构建脚本?

如何创建一个makefile来调用构建脚本?,makefile,Makefile,嗨,我有一个名为“buildMyJava”的构建脚本,它构建了一堆Java源代码。假设这些源代码位于不同的网络目录中,如“folder1”和“folder2”,则输出将进入称为“classes”的文件夹。我如何创建一个makefile,以便它知道只有在源代码(这两个目录中的*.java)发生了更改并且输出类丢失时才进行构建 我有以下类似的东西,但它总是构建,依赖项不起作用 all: task task: folder1/*.java folder2/*.java classes/ bu

嗨,我有一个名为“buildMyJava”的构建脚本,它构建了一堆Java源代码。假设这些源代码位于不同的网络目录中,如“folder1”和“folder2”,则输出将进入称为“classes”的文件夹。我如何创建一个makefile,以便它知道只有在源代码(这两个目录中的*.java)发生了更改并且输出类丢失时才进行构建

我有以下类似的东西,但它总是构建,依赖项不起作用

all: task

task: folder1/*.java folder2/*.java classes/
    buildMyJava

首先,构建脚本生成.java文件,因此.java文件应该是目标,而不是先决条件。所以你应该有这样的东西:

folder1/%.java folder2/%.java: 
    buildMyJava
唯一的问题是,如果执行make-j2,buildMyJava将运行多次(一次用于folder1,一次用于folder2)。事实上,这是makefiles的一个限制——您不能让多个目标只调用同一个配方一次。这里有一个很好的讨论:

但是请注意,一个“模式”目标算作一个单一目标——这意味着,如果您可以得到一个模式来匹配所有目标,那么您只能调用一次配方。需要注意的是,
%
符号不能表示
/
。因此,您不能执行
folder%.java
,因为这与
folder1/file1.java
不匹配。。。但是,如果可以将脚本拆分为一次仅输出到一个目录,则可以执行以下操作:

folder1/%.java:
    buildMyJava folder1

folder2/%.java:
    buildMyJava folder2
约翰