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.
精彩评论