java makefile jar包,Java的makefile

i don't understand what i did wrong with my makefile :

JAVA_SRCS:=$(wildcard tasks/src/*.java)

JAVA_CLASSES=$(subst /src/,/build/,$(JAVA_SRCS:.java=.class))

JFLAGS=-cp jar/octobot.jar -d tasks/build

JC=javac

.SUFFIXES: .java .class

.java.class:

$(JC) $(JFLAGS) $*.java

default: build

build: $(JAVA_CLASSES)

clean:

$(RM) tasks/build/*.class

I got this error :

make: *** No rule to make target `tasks/build/ClickTask.class', needed by `classes'. Stop.

zsh: exit 2 make

But strangely, when i re-write the rule build like this :

build: $(JAVA_SRCS:.java=.class)

no error, the rule is launched but does it every time (and it's not correct)

解决方案

@Dean Povey is correct: you can't do this with suffix rules, because they look in the same directory as the source. You can, however, do this with a GNU Make pattern rule (and you're already using GNUMake-isms in your Makefile, so whatever):

tasks/build/%.class: tasks/src/%.java

$(JC) $(JFLAGS) $<

Note, however, that make is ill-suited to building java source as one .java file can result in many .class files (inner classes, for instance). Automake's approach to this problem is to compile everything in a single call to javac and write out a timestamp file (echo timestamp > classnoinst.stamp, for example). Then anything that needs the java sources built depends on that stamp file and make clean removes the .stamp along with the .class files.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值