我不断从我的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