Android NDK: No rule to make target

AndroidAndroid Ndk

Android Problem Overview


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.

Android Solutions


Solution 1 - Android

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.

Hope that helps someone else.

Solution 2 - Android

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.

Solution 3 - Android

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.

Solution 4 - Android

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

I had the same problem.

Solution 5 - Android

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.

Solution 6 - Android

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIvanView Question on Stackoverflow
Solution 1 - AndroidIvanView Answer on Stackoverflow
Solution 2 - AndroidMaraguesView Answer on Stackoverflow
Solution 3 - AndroidE Net ArchView Answer on Stackoverflow
Solution 4 - AndroidcharlotteView Answer on Stackoverflow
Solution 5 - AndroidShiv BuyyaView Answer on Stackoverflow
Solution 6 - AndroidDanoli3View Answer on Stackoverflow