Reputation:
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_VARS)
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.
Upvotes: 53
Views: 61503
Reputation:
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.
Upvotes: 90
Reputation: 3233
Make sure LOCAL_PATH is at the top of the Android.mk else it won't work due to GNU Compiler syntax
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
Upvotes: 1
Reputation: 4130
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.
Upvotes: 0
Reputation: 458
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.
Upvotes: 2
Reputation: 1071
If there are any syntax error in Android.mk file, no rule to make target error will be there.
I had the same problem.
Upvotes: 0
Reputation: 38324
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.
Upvotes: 2