我的makefile目前有这个隐含的规则:
.java.class:
$(JAVAC) -classpath . $<
我需要实现的不仅是在.java文件上使用此规则,还在.sqlj文件上使用此规则。
我需要这样的东西:
(.java.sqlj).class:
$(SQLJC) -classpath . $<
原因是我的一个java文件与我的一个sqlj文件之间存在循环依赖关系,只有在一步编译.java文件和.sqlj文件时才会解析。 据我尝试过,sqlj转换器也可以编译.java文件,所以这应该没问题。
答案 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
?),这样单独处理将会失去您只需要的好处为每个输入文件更改时执行此操作。这将重新编译每个文件每个时间,其中任何一个都会发生变化。