Makefile - 将变量作为前缀应用于另一个变量的多个部分

时间:2011-03-13 11:01:19

标签: makefile javac

我想要使用makefile构建一个小型java项目,代码在src/package... /*.java中,字节码应该转到bin/package.../*.class
我当前的文件看起来像这样(简化):

JC = javac
SRCDIR = src
BINDIR = bin
JCFLAGS = -d $(BINDIR)/

CLASSES = $(SRCDIR)/package/class1.java $(SRCDIR)/package/class2.java $(SRCDIR)/package/class3.java 

default:
    $(JC) $(JCFLAGS) $(CLASSES)

它的作用和应有的作用,但必须有一种更优雅的方式来做到这一点 例如,有没有办法将路径($(SRCDIR)和包名称)作为前缀应用于所有类文件名,所以我不必将路径单独放在每个类的前面?

所有类都必须在一个javac调用中编译,因为它们中存在循环依赖,因此为每个类使用自己的目标不起作用:

default: $(CLASSES)
%.java:
    $(JC) $(JCFLAGS) $(SRCDIR)/$@

感谢您的帮助。

1 个答案:

答案 0 :(得分:10)

来自GNU make manual

$(addprefix prefix,names...)
  

参数名称被视为一系列名称,由空格分隔;前缀用作单位。 prefix的值前置在每个单独名称的前面,结果较大的名称与它们之间的单个空格连接在一起。例如,

$(addprefix src/,foo bar)
  

生成结果'src / foo src / bar'。