我正在尝试使用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文件夹。
答案 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 编译器语法,它将无法工作
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
如果需要 ndk-major-at-least 缩短路径或函数定义,也可以在此之前使用 ifeq/endif