2015-04-03 102 views
0

我不断从我的Android.mk文件收到此错误:如何配置make文件以查找其他目录中的头文件?

/home/sansari/mytree2/tbt/app/app.c:23:19: fatal error: debug.h: No such file or directory 
#include <debug.h> 

我所试图做的是从另一个目录中的源导入到我的JNI项目。所以我甚至没有任何关于构建app.c的声明;它通过制定隐含的规则来完成。惠斯特是伟大的。我的问题似乎不知道如何告诉让hey在debug.h的../ include目录中看到。那将是/ home/sansari/mytree2/tbt/include。我该怎么做?你需要哪些其他信息来帮助我?

为了提供一个参考点,以你我需要添加我试图从运行使:

/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni 

我没有发出-p选项进行;实际上我正在运行ndk-build命令,它是一个运行make的shell。而且它似乎是make在源代码目录中处理.mk fiels。如果没有为其他make文件添加include,是否可以隐式执行此操作?这是我为创建源文件所做的工作;它看起来像自动发现.mk文件在这些目录中,并运行它们:

FILE_LIST := $(wildcard /home/sansari/mytree2/tbt/*.c) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/*.c) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/*.c) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/*.c) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/*.c) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/**/*.c) 
LOCAL_MODULE := HelloJNI 
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) HelloJNI.c 

只是在这个问题上的更新;我发现VPATH语句可以正常工作,并且可以找到该文件。但是然后编译器可能看不到它。我仍在阅读和挖掘,但如果任何人都可以帮助,我一定会很感激。

@ognian - 嘿谢谢。我试过了你的建议,但似乎没有解决我的问题。我打印LOCAL_C_FLAGS的内容只是为了验证。以下是我有:

/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/jni/Android.mk:15: value of LOCAL_CFLAGS -I/home/sansari/mytree2/lib/include/debug.h 
[arm64-v8a] Compile  : HelloJNI <= app.c 
/home/sansari/mytree2/tbt/app/app.c:23:19: fatal error: debug.h: No such file or directory 
#include <debug.h> 
       ^
compilation terminated. 
make: *** [/home/sansari/AndroidStudioProjects/ThirdNDK/app/src/main/obj/local/arm64-v8a/objs/HelloJNI//home/sansari/mytree2/tbt/app/app.o] Erro 
r 1 

从我在线阅读,在我看来,我可以指向正确的目录,但我不知道还有什么需要发生的化妆才能看到它。网上也有一些关于编译器没有看到所需文件的可能性的评论。我想我需要更多地了解在使用正确路径加载变量后发生的情况。我查看了vpath和VPATH,但根据make手册,路径的目录部分被make删除。所以我尝试创建一个变量并将所有我的头文件的路径加载到它中。然后,我将内容复制到GPATH变量中,根据手册,该变量不会摆脱目录路径。但我想我不知道我还需要做什么。这里是我的Androdi.mk

LOCAL_PATH := $(call my-dir) 
#.INCLUDE_DIRS=make arch 
#TLK_DIR = ../../../../../..$(LOCAL_PATH)/mytree2/tbt 
include $(CLEAR_VARS) 
#-I.$(LOCAL_PATH)../../../../../../mytree2/tbt/include/ \ 
SOURCES = /home/sansari/mytree2/tbt/%.c 
#$(warning value of SOURCES is $(SOURCES)) 

INCLUDE_DIRECTORIES = /home/sansari/mytree2/lib/include 

vpath %.h $(INCLUDE_DIRECTORIES) 
CFLAGS += $(addprefix -I ,$(INCLUDE_DIRECTORIES)) 
#$(warning value of CFLAGS is $(CFLAGS)) 
LOCAL_CFLAGS += -I/home/sansari/mytree2/lib/include/debug.h 
$(warning value of LOCAL_CFLAGS $(LOCAL_CFLAGS)) 
#override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH))) 
HEATHER_LIST := $(wildcard /home/sansari/mytree2/tbt/*.h) 
FILE_LIST := $(wildcard /home/sansari/mytree2/tbt/*.c) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/*.c) 
HEATHER_LIST += $(wildcard /home/sansari/mytree2/tbt/**/*.h) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
#FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/*.h) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/*.c) 
HEATHER_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/*.h) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
#FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/*.h) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/*.c) 
HEATHER_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/*.h) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
#FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/*.h) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/*.c) 
HEATHER_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/*.h) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
#FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/*.h) 
FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/**/*.c) 
HEATHER_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/**/*.h) 
#$(warning value of FILE_LIST is $(FILE_LIST)) 
#$(warning value of HEATHER_LIST is $(HEATHER_LIST)) 
GPATH = $(HEATHER_LIST) 
#$(warning ******The Value of GPATH is $(GPATH)) 
#FILE_LIST += $(wildcard /home/sansari/mytree2/tbt/**/**/**/**/**/*.h) 
LOCAL_MODULE := HelloJNI 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/HEATHER_LIST 
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) HelloJNI.c 
# Build all java files in the java subdirectory 
#LOCAL_MODULE := HelloJNI 
#LOCAL_SRC_FILES := HelloJNI.c 
# Tell it to build an APK 
include $(BUILD_SHARED_LIBRARY) 
#include $(TLK_DIR)/makefile 

回答

0

您需要提供标题查找选项:

LOCAL_CFLAGS + = -I {您的头路,这里}

相关问题