Android ndk 是否将预构建步骤添加到android ndk构建模块以实现标头依赖性?

Android ndk 是否将预构建步骤添加到android ndk构建模块以实现标头依赖性?,android-ndk,makefile,Android Ndk,Makefile,基本上,我想在Android.mk文件中做的是: LOCAL_MODULE := foo $(LOCAL_MODULE): pre-build pre-build: @echo HI .PHONY: pre-build # ... include $(BUILD_SHARED_LIBRARY) ndk构建系统确实适用于ndk build foo,预构建步骤也适用,但如果在应用程序中使用此库,它将不会执行预构建步骤 特别是,我试图生成一个头文件(带有版本/日期戳等),该头文件放置在本地导

基本上,我想在Android.mk文件中做的是:

LOCAL_MODULE := foo
$(LOCAL_MODULE): pre-build
pre-build:
    @echo HI
.PHONY: pre-build
# ...
include $(BUILD_SHARED_LIBRARY)
ndk构建系统确实适用于
ndk build foo
,预构建步骤也适用,但如果在应用程序中使用此库,它将不会执行预构建步骤


特别是,我试图生成一个头文件(带有版本/日期戳等),该头文件放置在
本地导出中使用的路径中,以便使用库的模块可以使用头文件。

以下是我所做的,作为一个小技巧

看起来您可以相当容易地添加后期构建步骤,但不能添加预构建步骤

包含
构建过程后,可以向
$(本地构建模块)
添加依赖项,该依赖项实际上是始终执行的构建后过程

include $(BUILD_SHARED_LIBRARY)
$(LOCAL_BUILT_MODULE): post_build

post_build:
    $echo Hi, I'm post-build.
例如,如果您需要花哨地使用$(LOCAL_PATH)上的东西,那么


在为一个或多个体系结构(ABI)构建动态库时,我发现了一种执行预构建步骤的方法。这可能并不适用于所有情况

使用以下内容创建Application.mk文件(如果您还没有):

all: pre_build
pre_build:
    echo "This is the pre-build"

请注意,如上所述使用“all”最终会在Application.mk中进行预构建,并在Android.mk中进行后期构建。

这是一个很好的技巧。上面的解决方案在编译之后、安装+剥离之前执行构建后步骤。我需要在最后一次(安装后)运行后期构建步骤,以便在某处复制最终的.so文件。为此,我在依赖项的左侧使用了“all”而不是“$(LOCAL_builded_MODULE)”。是的,当您希望单个子项目/库在构建之前为自己做一些事情时,将东西放入Application.mk并不是一个通用的解决方案。如果该库在具有不同Application.mk文件的不同应用程序中使用,那么您必须为每个Application.mk复制该代码。我现在才想到的一个想法是创建一个子模块使用的虚拟(空)静态库,并让该虚拟静态库作为构建后步骤执行一些操作,用我原来的想法。这是针对Microsoft Visual Studio解决方案中出现的某些(类似但不同)情况的一种变通方法。我同意Peter,我所写的内容并不理想,但至少很简单。我刚从Eclipse切换到Android Studio,体验到NDK支持的糟糕状态,我有些震惊。看起来makefile黑客攻击的时间要长一点:)
all: pre_build
pre_build:
    echo "This is the pre-build"