【发布时间】: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