开发者

Android NDK: No rule to make target

I'm trying to build a simple Android application using NDK. Here are the contents of my Android.mk

LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VA开发者_StackOverflow社区RS)  

LOCAL_LDLIBS := -llog  

LOCAL_MODULE    := myNDK
LOCAL_SRC_FILES := native.c

include $(BUILD_SHARED_LIBRARY)

And when I'm running ndk-build I get:

make: * No rule to make target '/native.c', needed by '/Users/ivan/Documents/workspace/TestNDK/obj/local/armeabi/objs/myNDK/native.o'. Stop.

So the problem is obviously that make is searching the source files in the root directory and if I copy native.c to my root folder everything works perfectly.

The question is: what should I specify in my Android.mk to set the LOCAL_PATH to my working jni folder.


OK, I've solved my issue, and the reason was very strange: the problem is in the first line

'LOCAL_PATH := $(call my-dir)____'

It had several spaces in the end (I've replaced them with '_'). If you remove them everything works just fine.


On Mac OS X using android-ndk-r9 64 bit, remove white spaces from the NDK path. That fixed the No rule to make target error for me

Not exactly an answer for OP, but I guess it can save others from wasting their time.


Another problem that I found that causes this error is that the

LOCAL_SRC_FILES := native.c

and

LOCAL_MODULE    := native

use the same name. I'm not sure why this causes an error, as the code should be generated in different locations as native.o, native.od, and native. But, apparently it does.

I found this out while trying to compile hello.c to hello. Once I changed hello.c to main.c, everything compiled properly.


Make sure LOCAL_PATH is at the top of the Android.mk else it won't work due to GNU Compiler syntax

Android.mk

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

Also can have ifeq/endif prior to this if need the ndk-major-at-least shorten path or function defines


If there are any syntax error in Android.mk file, no rule to make target error will be there.

I had the same problem.


I have faced this issue when there is a spelling mistake in the root directory name.

Example: My path should have been:

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

but there is spelling mistake as shown

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

Once I corrected spelling mistake it worked fine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜