Как добавить включенные файлы .cpp в зависимости в android.mk?

В нашем Android-проекте у нас есть несколько десятков файлов C и CPP, которые мы подключаем через один файл-контейнер для сборки. Файл-контейнер указан в LOCAL_SRC_FILES, так как именно он скомпилирован. Однако, когда я редактирую один из включенных файлов .cpp, похоже, это не запускает сборку.

Если бы я полностью контролировал файл make, я бы просто включил все эти файлы в качестве зависимостей для соответствующего шага компиляции. Тем не менее, android.mk обрабатывает все эти зависимости компиляции в целом, поэтому я не знаю, куда их вставить.


person Ethan Bradford    schedule 10.01.2020    source источник
comment
У меня могла быть другая проблема. Теперь я получаю перестроение, когда редактирую один из включенных файлов.   -  person Ethan Bradford    schedule 12.01.2020
comment
Как Android отреагирует, если вы добавите файл контейнера И все файлы, которые он включает, в конфигурацию модуля?   -  person Simpl    schedule 14.01.2020
comment
Я предположил, хотя и не проверял, что если перечислить мои отдельные файлы как LOCAL_SRC_FILES, они будут скомпилированы напрямую. Хотя, вероятно, здесь происходило что-то еще; теперь я получаю перестроение, когда редактирую эти файлы, поэтому, вероятно, они были обнаружены с помощью обнаружения включаемых файлов.   -  person Ethan Bradford    schedule 15.01.2020


Ответы (2)


У меня есть три файла CPP по этому пути

..src\main\cpp

  • mainClass.cpp
  • родной-обработчик.h
  • родной-handler.cpp

И я включаю в файл android.mk вот так

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjson-c
LOCAL_SRC_FILES :=  ../prebuild/libjson/$(TARGET_ARCH_ABI)/libjson-c.a
LOCAL_EXPORT_C_INCLUDES := ../prebuild/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := ../prebuild/libcurl/$(TARGET_ARCH_ABI)/libcurl.a
LOCAL_EXPORT_C_INCLUDES := ../prebuild/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := Native
LOCAL_SRC_FILES := ../cpp/mainClass.cpp ../cpp/native-handler.cpp
LOCAL_C_INCLUDES := ../cpp/native-handler.h ../prebuild/include/json-c/json.h ../prebuild/include/curl/curl.h
LOCAL_LDLIBS := -lz -llog -ljnigraphics
LOCAL_STATIC_LIBRARIES := libjson-c libcurl
include $(BUILD_SHARED_LIBRARY)
person Praful Korat    schedule 10.01.2020
comment
Включает ли один из этих файлов .cpp другой файл .cpp? - person Ethan Bradford; 12.01.2020
comment
Нет, вы делаете отдельный файл .cpp - person Praful Korat; 13.01.2020

Android.mk предлагает некоторые функции, которых Android.bp/Soong намеренно избегают (например, включение файлов из родительских каталогов). Цель Soong состоит в том, чтобы в конечном итоге полностью заменить систему сборки на основе Android.mk. Поэтому, если вам удастся найти решение, которое работает с Android.mk файлами, у вас может снова возникнуть та же проблема в будущем выпуске Android.

Система сборки Android обнаружит изменения во всех указанных файлах (например, как LOCAL_SRC_FILES в Android.mk или srcs в Android.bp) и вызовет перестроение модуля. Я думаю, вам нужно переключиться на добавление всех исходных файлов, которые ваш файл-контейнер включил в конфигурацию модуля.

person Simpl    schedule 14.01.2020