Android NDK:没有规则来制定目标

时间:2011-06-05 13:02:34

标签: android android-ndk

我正在尝试使用NDK构建一个简单的Android应用程序。 以下是我的Android.mk

的内容
LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VARS)  

LOCAL_LDLIBS := -llog  

LOCAL_MODULE    := myNDK
LOCAL_SRC_FILES := native.c

include $(BUILD_SHARED_LIBRARY)

当我运行ndk-build时,我得到:

  

make: * 没有制定目标的规则   '/native.c', needed by '/用户/伊万/文档/工作区/ TestNDK / OBJ /本地/ armeabi / OBJ文件/ myNDK / native.o'。   停止。

所以问题显然是make正在搜索根目录中的源文件,如果我将native.c复制到我的根文件夹,一切都运行良好。

问题是:我应该在Android.mk中指定什么才能将LOCAL_PATH设置为我的工作jni文件夹。

6 个答案:

答案 0 :(得分:86)

好的,我已经解决了我的问题,原因很奇怪: 问题出在第一行

  

'LOCAL_PATH:= $(调用my-dir)____'

最后有几个空格(我用'_'代替它们)。如果你删除它们一切正常。

希望能帮助别人。

答案 1 :(得分:1)

在使用android-ndk-r9 64位的Mac OS X上,从NDK路径中删除空格。这为我修复了 No rule to make target 错误

不完全是OP的答案,但我想这可以让其他人免于浪费时间。

答案 2 :(得分:1)

我发现导致此错误的另一个问题是

LOCAL_SRC_FILES := native.c

LOCAL_MODULE    := native

使用相同的名称。我不确定为什么会导致错误,因为代码应该在native.o,native.od和native之间的不同位置生成。但是,显然确实如此。

我在尝试将hello.c编译为hello时发现了这一点。一旦我将hello.c更改为main.c,所有内容都已正确编译。

答案 3 :(得分:0)

如果Android.mk文件中存在任何语法错误,则不会出现导致目标错误的规则。

我遇到了同样的问题。

答案 4 :(得分:0)

当根目录名称中出现拼写错误时,我已经遇到了这个问题。

示例: 我的路径应该是:

 include $(phone-root-dir)/test/test.mk

但是显示拼写错误

include $(lphone-root-dir)/test/test.mk

一旦我纠正了拼写错误,它就可以正常工作。

答案 5 :(得分:0)

确保 LOCAL_PATH 位于 Android.mk 的顶部,否则由于 GNU 编译器语法,它将无法工作

Android.mk

LOCAL_PATH := $(call my-dir)  
include $(CLEAR_VARS)

如果需要 ndk-major-at-least 缩短路径或函数定义,也可以在此之前使用 ifeq/endif