Android 运行 shell 通过 makefile 为 APP_ABI 中提到的每个平台编写脚本
Android run shell script via makefile for every platform mentioned in APP_ABI
我有一个 Android 为平台 x86、armeabi 和 armeabi-v7a 构建的本机应用程序。现在,根据平台是 x86 还是 arm,我需要 运行 脚本相应地设置相应的参数,以便设置适当的第三方工具环境变量。我尝试执行以下操作:
.o.cpp:
ifeq ($(TARGET_ARCH),x86)
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh x86)))
else
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm)))
endif
但问题是,当 makefile 被解析时,这些脚本在初始阶段本身得到 运行 3 次,而不是在每个平台的编译开始之前。有没有办法解决这个问题,以便脚本在每个平台的编译开始之前得到 运行?谢谢。
更新为 Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \ <path_to_include_files>
LOCAL_CFLAGS := <cflags included here>
LOCAL_LDLIBS := <ld libs included here>
LOCAL_SRC_FILES := <src files to be compiled>
LOCAL_MODULE := <module_name>
LOCAL_SHARED_LIBRARIES := <shared libs on which we are dependent>
LOCAL_WHOLE_STATIC_LIBRARIES := <static libs>
include $(BUILD_SHARED_LIBRARY)
一个简单但不优雅的解决方案如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \ <path_to_include_files>
LOCAL_CFLAGS := <cflags included here>
LOCAL_LDLIBS := <ld libs included here>
ifeq ($(TARGET_ARCH),x86)
LOCAL_SRC_FILES := /tmp/dummy.x86.c
else
LOCAL_SRC_FILES := /tmp/dummy.arm.c
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm)))
endif
LOCAL_SRC_FILES += <src files to be compiled>
LOCAL_MODULE := <module_name>
LOCAL_SHARED_LIBRARIES := <shared libs on which we are dependent>
LOCAL_WHOLE_STATIC_LIBRARIES := <static libs>
include $(BUILD_SHARED_LIBRARY)
.PHONY: /tmp/dummy.x86.c /tmp/dummy.arm.c
/tmp/dummy.x86.c:
$(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh x86
@touch $@
/tmp/dummy.arm.c:
$(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm
@touch $@
一个警告:这每次都会 link 库,即使没有任何改变。您可以仔细设置依赖项而不是 .PHONY
来改善这一点。
我有一个 Android 为平台 x86、armeabi 和 armeabi-v7a 构建的本机应用程序。现在,根据平台是 x86 还是 arm,我需要 运行 脚本相应地设置相应的参数,以便设置适当的第三方工具环境变量。我尝试执行以下操作:
.o.cpp:
ifeq ($(TARGET_ARCH),x86)
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh x86)))
else
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm)))
endif
但问题是,当 makefile 被解析时,这些脚本在初始阶段本身得到 运行 3 次,而不是在每个平台的编译开始之前。有没有办法解决这个问题,以便脚本在每个平台的编译开始之前得到 运行?谢谢。
更新为 Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \ <path_to_include_files>
LOCAL_CFLAGS := <cflags included here>
LOCAL_LDLIBS := <ld libs included here>
LOCAL_SRC_FILES := <src files to be compiled>
LOCAL_MODULE := <module_name>
LOCAL_SHARED_LIBRARIES := <shared libs on which we are dependent>
LOCAL_WHOLE_STATIC_LIBRARIES := <static libs>
include $(BUILD_SHARED_LIBRARY)
一个简单但不优雅的解决方案如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \ <path_to_include_files>
LOCAL_CFLAGS := <cflags included here>
LOCAL_LDLIBS := <ld libs included here>
ifeq ($(TARGET_ARCH),x86)
LOCAL_SRC_FILES := /tmp/dummy.x86.c
else
LOCAL_SRC_FILES := /tmp/dummy.arm.c
$(info $(shell ($(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm)))
endif
LOCAL_SRC_FILES += <src files to be compiled>
LOCAL_MODULE := <module_name>
LOCAL_SHARED_LIBRARIES := <shared libs on which we are dependent>
LOCAL_WHOLE_STATIC_LIBRARIES := <static libs>
include $(BUILD_SHARED_LIBRARY)
.PHONY: /tmp/dummy.x86.c /tmp/dummy.arm.c
/tmp/dummy.x86.c:
$(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh x86
@touch $@
/tmp/dummy.arm.c:
$(CACHE_LOCAL_PATH_MAIN)/setup_tool.sh arm
@touch $@
一个警告:这每次都会 link 库,即使没有任何改变。您可以仔细设置依赖项而不是 .PHONY
来改善这一点。