【问题标题】:Makefile does not recognize target definitionMakefile 无法识别目标定义
【发布时间】:2012-12-08 00:49:36
【问题描述】:

我正在使用 Dialogic DivaSDK 开展一个项目,以便能够分析电话呼叫。由于 DivaSDK 通过 JNI 支持 Java,我想尝试一下示例。不幸的是:整个 Java 文档不如 C# 完整。所以这似乎就像在浑水里钓鱼一样。 在我的第一步中,我想查看示例 (Link to DivaSDK with Sample Files ) 文件并尝试一下。每个示例都有一个必须运行的生成文件。手册中唯一涉及我的问题的部分听起来像这样:

有关如何编译和链接您的应用程序的详细信息,请查看随 Diva SDK 提供的任何示例。在每个示例子目录中,您都会找到一个 makefile,它描述了该应用程序的编译和链接过程。 makefile 的评估需要一些 shell 脚本和 makefile 语法的知识,这超出了本文档的范围。

我现在的问题是给定的 makefile 没有按预期的方式工作。我收到错误“无目标”因为我对 makefile 了解不多,所以我无法弄清楚该文件有什么问题。

#-------------------------------------------------------------------------------
#
#  makefile to geenrate the Diva SDK Java sample "SimpleApp".  This makefile 
#  generate the class files for teh framework and the sample and creates 
#  a SimpleApp.jar that can be executed via jav -jar SimpleApp
#  
#  The makefile assumes that the java development enmvironment is installed and 
#  the java tools are accessable from the command prompt.
#
#-------------------------------------------------------------------------------

FRAMEWORK_PATH=..\..\Framework
FRAMEWORK=$(FRAMEWORK_PATH)\DivaAPI.java $(FRAMEWORK_PATH)\DivaCallBase.java

BIN_DIR=.\bin
SRC_DIR=.\src

TRAGET=SimpleApp

#edited with hint from @Aaron Digulla
all : $(BIN_DIR)\$(TRAGET).jar

SRC=$(SRC_DIR)\SimpleApp.java \
    $(SRC_DIR)\AppCall.java


$(BIN_DIR)\$(TRAGET).jar: $(SRC)
@echo #-----------------------------------------------
@echo # Generate class files
@echo #-----------------------------------------------
javac -d $(BIN_DIR) -sourcepath $(FRAMEWORK_PATH) $(FRAMEWORK) $(SRC)
@echo #-----------------------------------------------
@echo # Generate jar files and clean class and manifest
@echo #-----------------------------------------------
copy $(SRC_DIR)\manifest.txt $(BIN_DIR)
cd $(BIN_DIR)
jar -cvfm $(TRAGET).jar manifest.txt *.class > nul
del *.class
del manifest.txt
cd ..
@echo #-----------------------------------------------
@echo # $(BIN_DIR)\$(TARGET).jar successfully created
@echo #-----------------------------------------------

看来,目标定义是错误的,但我不知道是哪一种方式。任何提示将不胜感激。

edit1: 有了@Aaron Digulla 的提示,它的效果会好一些。至少目标被识别。但是现在有一个错误告诉我,没有创建 jar 的规则。

edit2: 嗯...文件路径似乎是错误的。如果我用普通斜杠(“/”)替换一些反斜杠(“\”),编译就会开始。它在复制时停止...

【问题讨论】:

  • 在我处理过的大多数make 版本中,每个目标的命令(但不是target : dependencies 位)必须缩进,通常使用单个。不知道这是否是您的问题,但取决于您的make 版本有多挑剔,它可能至少没有帮助......
  • 感谢您的回复。你说得对,需要缩进,但我不知道如何在 WYSIWYG 编辑器中设置它们。在我的文件中,它们存在。
  • 请注意(在大多数 make 实现中)缩进 必须 是一个制表符;多个空格不行。此外,至少在 unix 上,每一行都是一个单独的进程,因此在一行中执行 cd 不会更改下一行的目录(尝试 cd $(BIN_DIR); jar -cvfm ...
  • .jar: 目标之后的行必须缩进一个制表符才能被识别为命令。

标签: makefile


【解决方案1】:

错误表示Makefile中没有目标allmake懦弱地拒绝继续。

我的猜测是这个 Makefile 应该是从另一个 Makefile 调用的。

将此行添加到 Makefile:

all : $(BIN_DIR)\$(TRAGET).jar

它应该可以工作。如果错误仍然存​​在,请确保您使用 GNU make 或尝试make all

【讨论】:

  • 你猜对了,makefile 可以从另一个调用。但这也不起作用(有很多不同的错误)。用你的代码 Makefile 至少可以迈出下一步。但是现在 Makefile 告诉我创建 jar 没有规则。
  • 是windows还是linux?
  • Makefile 是为 Windows 编写的。替换` with /, copy` -> cp, del -> rm
  • @RobertSchröder 哪个版本的?制作?制作? GNU 制造?
猜你喜欢
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多