【问题标题】:Yet another "multiple target patterns" makefile error另一个“多目标模式”makefile 错误
【发布时间】:2015-06-25 13:56:25
【问题描述】:

我试着环顾四周,但我在这里看到的所有问题都太高级了,我无法理解。

这是我的生成文件:

compile: bin src cmp
bin: mkdir bin
src: find src -name "*.java" > sources.txt
cmp: javac -cp biuoop-1.4.jar -d bin @sources.txt
run: java -cp biuoop-1.4.jar:bin:src/resources Ass6Game
jar: jar -cmf Ass6Game.jar Manifest.txt -C bin . -C src resources

当我尝试运行 make compile 时,我收到“多个目标模式”错误。我做错了什么?

【问题讨论】:

    标签: java makefile


    【解决方案1】:

    您的 makefile 语法不正确。

    syntax of a make rule

    一般来说,规则如下所示:

    targets : prerequisites
       recipe
       …
    

    或者像这样:

    targets : prerequisites ; recipe
       recipe
    

    而您的配方行位于先决条件位置,因此 java 命令中的 : 会使 make 混淆。

    你的 makefile 应该是这样的

    compile: bin src cmp
    bin: ; mkdir bin
    src: ; find src -name "*.java" > sources.txt
    cmp: ; javac -cp biuoop-1.4.jar -d bin @sources.txt
    run: ; java -cp biuoop-1.4.jar:bin:src/resources Ass6Game
    jar: ; jar -cmf Ass6Game.jar Manifest.txt -C bin . -C src resources
    

    或者像这样

    compile: bin src cmp
    bin:
            mkdir bin
    src:
            find src -name "*.java" > sources.txt
    cmp: 
            javac -cp biuoop-1.4.jar -d bin @sources.txt
    run:
            java -cp biuoop-1.4.jar:bin:src/resources Ass6Game
    jar:
            jar -cmf Ass6Game.jar Manifest.txt -C bin . -C src resources
    

    或者实际使用 make 为您提供的东西更像这样

    JAR := biuoop-1.4.jar
    SOURCES := $(shell find src -name '*.java')
    # Or if src is a single directory without sub-directories
    #SOURCES := $(wildcard src/*.java)
    
    GAMEJAR := Ass6Game.jar
    
    .PHONY: all
    all: $(JAR)
    
    bin:
            mkdir bin
    
    $(JAR): $(SOURCES) | bin
            javac -cp $@ -d bin $^
    
    # See http://www.gnu.org/software/make/manual/make.html#Force-Targets for what `FORCE` is doing here.
    $(GAMEJAR): FORCE
            jar -cmf $@ Manifest.txt -C bin . -C src resources
    
    FORCE: ;
    
    .PHONY: run
    run: $(GAMEJAR)
            java -cp $(JAR):bin:src/resources $(GAMEJAR)
    

    它遵循Rules of Makefiles 更好一点,实际上可以根据需要智能地重建您的文件。

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      相关资源
      最近更新 更多