android - 简化构建多个可执行文件的 Android.mk 文件

标签 android makefile android-ndk

我正在为 Android 构建一些硬件测试。我有一个 Android.mk 文件,它一个接一个地构建这些可执行文件,为每个文件使用一个 makefile 代码块,如下所示:

##### shared #####
LOCAL_PATH := $(my-dir)

##### test_number_one #####
test_name := test_number_one
include $(CLEAR_VARS)
LOCAL_CFLAGS := $(commonCflags)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../
LOCAL_MODULE_TAGS := optional eng
LOCAL_SHARED_LIBRARIES := some_library some_other_library
LOCAL_MODULE := $(test_name)
LOCAL_SRC_FILES := tests/$(test_name)/$(test_name).c
include $(BUILD_EXECUTABLE)


##### test_number_two #####
test_name := test_number_two
include $(CLEAR_VARS)
LOCAL_CFLAGS := $(commonCflags)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../
LOCAL_MODULE_TAGS := optional eng
LOCAL_SHARED_LIBRARIES := some_library some_other_library
LOCAL_MODULE := $(test_name)
LOCAL_SRC_FILES := tests/$(test_name)/$(test_name).c
include $(BUILD_EXECUTABLE)

如您所见,每个测试都会重复大部分代码(在 include $(CLEAR_VARS)include $(CLEAR_VARS) 之间)。我想对此进行简化,以便我有一个测试名称列表和一段为每个测试名称“调用”的 makefile 代码。我不在乎该代码是否必须拆分到另一个文件中。这里有一些 python-esque 伪代码来演示我要做什么:

##### shared #####
LOCAL_PATH := $(my-dir)

##### test_number_one #####
test_names := test_number_one test_numer_two

for each item in test_names:
    include $(CLEAR_VARS)
    LOCAL_CFLAGS := $(commonCflags)
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../
    LOCAL_MODULE_TAGS := optional eng
    LOCAL_SHARED_LIBRARIES := some_library some_other_library
    LOCAL_MODULE := $(item)
    LOCAL_SRC_FILES := tests/$(item)/$(item).c
    include $(BUILD_EXECUTABLE)

这在 Android.mk 文件中可能吗?怎么做到的?

最佳答案

你应该可以做类似的事情

define my_add_executable
    include $(CLEAR_VARS)
    LOCAL_CFLAGS := $(commonCflags)
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../
    LOCAL_MODULE_TAGS := optional eng
    LOCAL_SHARED_LIBRARIES := some_library some_other_library
    LOCAL_MODULE := $1
    LOCAL_SRC_FILES := tests/$1/$1.c
    include $(BUILD_EXECUTABLE)
endef

test_names := test_number_one test_numer_two
$(foreach item,$(test_names),$(eval $(call my_add_executable,$(item))))

我们的项目中有类似的结构,包括多个预建库。

关于android - 简化构建多个可执行文件的 Android.mk 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651608/

相关文章:

java - 使用 get() 和 put() 访问 OpenCV for Java 中的像素值

shell - 抑制 "nothing to be done for '全部'"

android - 通过 ndk-build 构建 libcryptopp.a 时没有存档符号表(运行 ranlib)

java - Android Eclipse 无法满足链接错误

android - 无法在后台线程上调用观察

Android - 在通知栏保持通知稳定

android - 谷歌地方 API : Number of results

c - 自动将您自己的代码插入到另一个项目中

javascript - make 构建/最小化已更改的 JS 文件

android - 从 C (NDK) 调用 Thread.yield() 或等效函数