2015-04-03 36 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 {您的頭路,這裏}

相關問題