2012-01-23 13 views
46

ndkを使用してAndroidプロジェクトを構築しようとしていますが、いくつかの問題が発生しました。Android.mk、すべてのcppファイルを含む

ここで働くAndroid.mkファイルがあります:

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := mylib 
LOCAL_CFLAGS := -Werror 
LOCAL_SRC_FILES := main.cpp, Screen.cpp, ScreenManager.cpp 
LOCAL_LDLIBS := -llog 

include $(BUILD_SHARED_LIBRARY) 

LOCAL_SRC_FILESの下でそれらを手動でリストせず、私はディレクトリ内のすべての*の.cppファイルを指定することができます方法はありますか?

これまでLOCAL_SRC_FILES = $(ワイルドカード* .cpp)を使ってみましたが、今はうまくいきました。ファイルが選択されていないようです。

FILE_LIST := $(wildcard $(LOCAL_PATH)/[DIRECTORY]/*.cpp) 
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 

あなたはこのような何かを試みることができる

答えて

71

... ...ファイルの実際のディレクトリに[DIRECTORY]を変更します。それらがあなたの.mkファイルと同じディレクトリにある場合は、その部分を削除してください。 FILE_LIST変数を作成して[DIRECTORY]ディレクトリにある.cpp個のファイルをすべて検索します。その後、ファイル一覧で使用します。 LOCAL_SRC_FILES行は、リストからLOCAL_PATHを削除します。

+0

ありがとうございました! – gq3

+1

@DiscGolferなぜリストから 'LOCAL_PATH'を削除するのですか? – Narek

+1

@Narek 'Android.mk'の一番上に' LOCAL_PATH:= $(call my-dir) 'を定義する必要があります。これは、NDKルートから現在のファイルへの相対パスを保持します。したがって、上記の 'LOCAL_SRC_FILES'行では、ファイルパスが' LOCAL_PATH'に相対的であるため、リストから 'LOCAL_PATH'を削除しました。削除されないと、パスを無効にします。 – DRiFTy

20

私はAndroid.mkのためにこのスクリプトを使用してきました。

#traverse all the directory and subdirectory 
define walk 
    $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e))) 
endef 

#find all the file recursively under jni/ 
ALLFILES = $(call walk, $(LOCAL_PATH)) 
FILE_LIST := $(filter %.cpp, $(ALLFILES)) 

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 

Here要旨

+0

これを使っている人は誰でも、この定義があなたのMakefileの中にあることを確認してください。そうしないと、呼び出しは黙って失敗します。 –

+0

ちょうどメモ、これは完璧な解決策です。 –

+0

FILE_LISTからどのようにパスを除外しますか? FILE_LISTをLOCAL_SRC_FILESに割り当てると$(FILE_LIST)だけでなく、なぜ$(FILE_LIST:$(LOCAL_PATH)/%=%)を書くのですか? –

2

どのようにこのような程度である:あなたが*の拡大は$(LOCAL_PATH)/が含まれ、それはOKかもしれないことを恐れてはいけたい場合

LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp)) 

LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/./,,$(wildcard $(LOCAL_PATH)/./*.cpp)) 
関連する問題