У меня есть проект NDK, где я создаю разделяемые библиотеки, используя кросс-компилятор и стандартные утилиты gnu make utils. Это делается с помощью отдельного скрипта. Но для использования библиотек в моем проекте я хотел бы, чтобы мой процесс Android.mk
вызывал мой скрипт для генерации общей библиотеки, если он еще не был создан, а затем имеет Android.mk
, обертывая его с помощью процесса PREBUILT_SHARED_LIBRARY
.Android.mk PREBUILT_SHARED_LIBRARY Как создать файл LOCAL_SRC_FILES из сценария?
В настоящее время, если я запускаю свой сценарий в автономном режиме для создания libmy_so.so
, тогда будет работать следующий make-файл. Однако, если я не запустить сценарий явно первым, я получаю следующее сообщение об ошибке:
Android NDK: ERROR:/path_to_project/Android.mk:my_module: LOCAL_SRC_FILES points to a missing file
и мой сценарий никогда не вызывается, так что делает процесс терпит неудачу, прежде чем даже пытаться решить эту зависимость.
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_SRC_FILES := libmy_so.so
LOCAL_EXPORT_CFLAGS := # some stuff
LOCAL_EXPORT_LDLIBS := # some stuff
$(LOCAL_PATH)/libmy_so.so:
echo "generate file"
$(shell run_script_that_creates_libmy_so.so)
include $(PREBUILT_SHARED_LIBRARY)
Есть ли чистое решение? Я даже нормально запускаю сценарий автоматически как шаг предварительной обработки (я всегда могу отключить мой скрипт, если файл уже существует), но я не нашел заклинание, которое позволяет переменной LOCAL_SRC_FILES
указывать на несуществующий файл. Я подумал о том, чтобы начать создание манекена libmy_so.so
, но это уродливый взлом.
Я думаю, вам нужно настроить ndk в build.gradle и позволить одному зависеть от того, что ему нужно. –
Я не могу использовать build.gradle непосредственно для этого, потому что я создаю расширяемый инструмент, который должен облегчить работу с NDK. См. [Этот проект] (https://github.com/ericwlange/hemroid), чтобы увидеть, что я пытаюсь сделать. –