2013-12-19 192 views
2

我有一個項目的目錄結構如下:遞歸搜索子目錄

Source----------------- 
---Project1------------ 
-----------Project1_vA- 
-----------Project1_vB- 
---Project2------------ 
-----------Project2_vA- 
-----------Project2_vB- 
---Project3------------ 
-----------Project3_vA- 

我試圖寫一個遞歸構建LIB makefile文件中所有子目錄:

DIRS := $(dir $(wildcard $(LOCAL_PATH)/*/)); 
$(info $(DIRS))  

for item in $(DIRS); do \ 
    $(info sublib)  \ 
    $(info $(item))   \ 
    if [[ "$item" == "$LOCAL_PATH/glm/" ||  \ 
    "$item" == "$LOCAL_PATH/common/" ]]  \ 
    then       \ 
     continue;                \ 
    fi                   \ 

    SUBDIRS := $(dir $(wildcard $(item)/*/))       \ 
    $(info $(SUBDIRS))               \ 
    for subitem in $(SUBDIRS); do          \ 
     include $(CLEAR_VARS)             \ 
     $(info $(subitem))              \ 
     LOCAL_MODULE   := $(subitem)           \          \ 
     LOCAL_CFLAGS   := -g -fexceptions        \ 
     LOCAL_ARM_MODE   := arm           \ 
     LOCAL_SRC_FILES   := $(subitem)/*.cpp        \ 
           $(subitem)/main.cpp        \ 
     LOCAL_SHARED_LIBRARIES := common           \ 
     LOCAL_LDLIBS   := -llog -lGLESv2 \ 
     include $(BUILD_SHARED_LIBRARY)           \ 
    done;                  \ 
done; 

但什麼不對循環塊 - $(info $(item)) - 顯示空格。

$(info $(DIRS)) - 顯示"Source/Project1/ Source/Project2/ Source/Project3/;"

請幫助。

+0

爲什麼不顯示空格?這就是通配符的工作方式,它返回與通配符操作匹配的空格分隔的路徑列表。假設'LOCAL_DIR'設置爲'Source',結果對我來說看起來很好。也許如果你告訴我們你期望的結果,我們可以建議你... – MadScientist

+0

另外,'for'循環是一個shell循環;它在這樣的makefile中沒有地位。這個makefile,就像你在這裏抄錄的那樣,根本就不對。 – MadScientist

+0

我想要爲每個子目錄(Project1_vA,Project1_vB ..)庫進行bild。爲此,我需要爲LOCAL_MODULE創建一個名爲「libProject1_vA」的唯一名稱。在bild時,我不知道子目錄的數量,所以我需要動態生成一個子目錄列表,併爲它們中的每一個生成一個庫。在第一個週期中,我想繞過所有的項目目錄。在第二個週期中,我想繞過項目的所有子目錄。 – user2881543

回答

1

如何使用find?

DIRS := `find . -type d` 
PROJECT_DIRS := $(filter ...,$(DIRS)) 
NON_PROJECT_DIRS := $(filter-out ...,$(DIRS)) 

.PHONY: $(DIRS) 

$(PROJECT_DIRS): $(NON_PROJECT_DIRS) 
    ... rules for making projects ... 

$(NON_PROJECT_DIRS): 
    ... rules for making sub dirs ...