如何检查库是否已在 make 文件中定义

How to check if a library already defined in make file

有没有办法检查一个库是否已经定义,然后跳过再次定义它。

我有一些 Android make 文件,其库定义如下:

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

还有另一个 Android.mk 包括所有其他小型库,只是为了同时自动构建多个项目。

但是这个问题会报错,因为有些库已经在另一个Android.mk文件中定义了,那么有什么方法可以检查库是否定义了,就不需要再定义了?

NDK 构建中没有任何内置的东西可以可靠地执行此操作(ndk-build 本身显然可以检查,但它这样做的方式是一个实现细节而不是 API,不幸的是)。

一个选择是自己设置一个变量,基本上就像你使用 C 包含保护一样,即

ifdef foo_defined
foo_defined := true

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

endif

不过,从事情的声音来看,重构构建脚本可能会更好,这样您就不会最终定义两次?不确定这对您来说有多可行。您可能对 https://developer.android.com/ndk/guides/android_mk#import-module 感兴趣(我会努力为该功能获取一些更好的文档,因为它基本上是闻所未闻的)。