为2种文件类型制定隐式规则

时间:2015-12-01 11:38:14

标签: java makefile sqlj

我的makefile目前有这个隐含的规则:

.java.class:
    $(JAVAC) -classpath . $<

我需要实现的不仅是在.java文件上使用此规则,还在.sqlj文件上使用此规则。

我需要这样的东西:

(.java.sqlj).class:
    $(SQLJC) -classpath . $<

原因是我的一个java文件与我的一个sqlj文件之间存在循环依赖关系,只有在一步编译.java文件和.sqlj文件时才会解析。 据我尝试过,sqlj转换器也可以编译.java文件,所以这应该没问题。

1 个答案:

答案 0 :(得分:1)

您无法使用Old-Fashioned Suffix Rules

您需要使用Implicit Rules

所以你会写

%.class: %.java %.sqlj
        $(SQLJC) -classpath . $<

假设%.java文件是主要输入。如果$(SQLJC)需要.sqlj文件,请使用

%.class: %.sqlj %.java
        $(SQLJC) -classpath . $<

会这样做。

如果您需要同时将两个 .sqlj .java文件传递给$(SQLJC),请替换{{在其中任何一个示例中都带有$<

要一次编译所有 $^.java个文件,您需要更多类似的内容:

.sqlj

但假设您实际上可以将任何# Assumes files are all in the current directory. FILES=$(wildcard *.java) $(wildcard *.sqlj) tgt.class: $(FILES) $(SQLJC) -classpath . $^ .java文件编译为某种中间格式(.sqlj?),这样单独处理将会失去您只需要的好处为每个输入文件更改时执行此操作。这将重新编译每个文件每个时间,其中任何一个都会发生变化。