Android.mk,包含所有cpp文件

时间:2012-01-23 23:50:58

标签: android android-ndk

我正在尝试使用ndk构建一个Android项目,但我遇到了一些麻烦。

以下是适用的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)

有没有办法允许我在目录中指定所有* .cpp文件,而不在LOCAL_SRC_FILES下手动列出?

到目前为止,我尝试使用LOCAL_SRC_FILES = $(通配符* .cpp),但它现在可以正常工作,似乎没有文件被选中。

4 个答案:

答案 0 :(得分:70)

你可以试试这样的......

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

...将[DIRECTORY]更改为文件的实际目录。如果它们与.mk文件位于同一目录中,则删除该部分。创建FILE_LIST变量以查找.cpp目录下的所有[DIRECTORY]个文件。然后在文件列表中使用它。然后,LOCAL_SRC_FILES行会从商家信息中删除LOCAL_PATH

答案 1 :(得分: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是要点

答案 2 :(得分:3)

这样怎么样:

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

如果你害怕扩展*包含$(LOCAL_PATH)/,那可能没问题:

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

答案 3 :(得分:0)

使用此:

LOCAL_SRC_FILES += $($(wildcard $(LOCAL_PATH)/*.cpp):$(LOCAL_PATH)/%=%)