如何创建一个makefile来调用buildscript?

时间:2014-03-25 21:43:29

标签: makefile

您好我有一个名为“buildMyJava”的构建脚本,它构建了一堆Java源代码。假设这些源代码位于不同的目录,例如“folder1”和“folder2”,则输出将转到名为“classes”的某个文件夹。我如何创建一个makefile,因此只有当源代码意味着这两个目录中的* .java发生了变化以及缺少输出类时才知道它是否构建?

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

all: task

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

1 个答案:

答案 0 :(得分:0)

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

folder1/%.java folder2/%.java: 
    buildMyJava

唯一的问题是,如果你做一个make -j2,buildMyJava将运行多次(一次用于folder1,一次用于folder2)。实际上,这是makefile的限制 - 你不能让多个目标只调用一次相同的配方。这里有一个很好的讨论:http://www.cmcrossroads.com/article/rules-multiple-outputs-gnu-make

请注意,虽然“模式”目标计为单个目标 - 这意味着,如果您可以获得匹配所有目标的模式,则只能调用一次配方。一个小警告 - %符号不能代表/。因此,您无法执行folder%.java,因为它与folder1/file1.java不匹配...如果您可以将脚本拆分为一次仅输出到一个目录,则可以执行以下操作:< / p>

folder1/%.java:
    buildMyJava folder1

folder2/%.java:
    buildMyJava folder2

约翰