Есть ли способ заставить Android NDK перестроить определенную библиотеку при изменении конфигурации сборки в Eclipse?
Я создаю проект Android, используя Android NDK для создания библиотек C++. Я использую Eclipse с плагином Sequoyah. Все настроено и работает хорошо.
Однако у меня возникла проблема с конфигурациями сборки. Вы можете управлять конфигурациями сборки, щелкнув правой кнопкой мыши проект-> свойства, а затем перейдите в раздел C/C++ Build. Это позволяет создавать традиционные сборки Debug и Release, от которых так или иначе зависит большинство библиотек C++.
Вот пример моей конфигурации «Отладка»:
V=1 NDK_DEBUG=1 NDK_APPLICATION_MK=config/debug/Application.mk
Они работают хорошо, за исключением того, что когда я переключаюсь между конфигурациями, это не вызывает перестроение библиотек, которые я создаю. Это было бы ожидаемо для чего-то вроде Visual Studio, где каждая конфигурация сборки сбрасывается в другой каталог, но в Eclipse все сбрасывается в один и тот же каталог. Я вынужден фактически изменить соответствующие исходные файлы, чтобы вызвать перестроение. Итак, что в итоге происходит, так это то, что я запускаю (например) в конфигурации отладки, но связываюсь с библиотеками, которые были встроены в релиз.
Итак, мой вопрос: есть ли способ заставить NDK перестроить библиотеку при изменении конфигурации? Я знаю о команде -B, которую я могу добавить, но она перестраивает все, каждый раз. Я был бы готов пересобирать каждый раз, если бы мог сделать это только для одной конкретной библиотеки (в данном случае libBootInfo).
Вот как выглядит мой корневой файл Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game$(MY_BUILD_CONFIG_EXTENSION)
# Include files are relative to the NDK root directly (fix by prepending with $(LOCAL_PATH))
# Source files are relative $(LOCAL_PATH)
#LOCAL_LDLIBS := -landroid
# Add all source file names to be included in lib separated by a whitespace
LOCAL_SRC_FILES := ../../../../../../engine/code/main/mainandroid.cpp
# Module dependencies are expressed with LOCAL_STATIC_LIBRARIES and LOCAL_SHARED_LIBRARIES.
# we're building the "main" entry point, so it doesn't depend on much
LOCAL_STATIC_LIBRARIES := libDebug$(MY_BUILD_CONFIG_EXTENSION) libCore$(MY_BUILD_CONFIG_EXTENSION)
include $(BUILD_SHARED_LIBRARY)
$(call import-module,libBdCore)
$(call import-module,libDebug)
##################################################################
## In addition to the core game library, we also build another
## *.so file here: "libBootInfo". This very small library is used
## by Java to find out which version of game to load based on
## the current build configuration.
##
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libBootInfo
# Add all source file names to be included in lib separated by a whitespace
# TODO: This path is relative to "android-ndk\build\core" which seems
# different from the LOCAL_SRC_FILES in game above. It seems like
# the build process leaves us in a different directory than we started.
# We make need to look into a way to make sure that this path always
# works regardless of what came before it.
#
LOCAL_SRC_FILES := ../../../../engine/code/main/bootinfo.cpp
include $(BUILD_SHARED_LIBRARY)
Android.mk
часть, которая создает libBootInfo, не должна пересчитыватьLOCAL_PATH := $(call my-dir)
. Это потому, что$(call my-dir)
на самом деле приводит путь к последнему созданному файлу, включенному перед этим оператором. Если вы переместите всю часть libBootInfo в верхнюю часть вашегоAndroid.mk
, все будет работать гладко. - person Alex Cohn   schedule 23.10.2012LOCAL_C_INCLUDES
относятся к текущему каталогу, который обычно является корнем проекта. - person Alex Cohn   schedule 23.10.2012