Была такая же проблема, значит, решение есть. Во-первых, поскольку кажется, что вы не можете сделать это с изменением файлов android.mk, вам следует изменить файл в системе, построенной ndk, но это не очень опасно%). Это решение протестировано на r8b NDK. Так:
- Добавьте следующий код в скрипт /build/core/build-binary.mk перед
# Build the sources to object files
:
#precompiled helper:
ifeq ($(TARGET_ARCH_ABI),x86)
$(call set-src-files-target-cflags,$(LOCAL_PCH),)
else
$(call set-src-files-target-cflags,$(LOCAL_PCH),-mthumb)
endif
# Build PCH
#
get-pch-name = $(strip \
$(subst ../,__/,\
$(eval __pch := $1)\
$(eval __pch := $(__pch:%.h=%.precompiled.h))\
$(__pch)\
))
ifneq (,$(findstring DPCH,$(call module-get-c++-flags,$(LOCAL_MODULE))))
# Build PCH into obj directory
LOCAL_BUILT_PCH := $(call get-pch-name,$(LOCAL_PCH))
$(call ndk_log, ___________________________Building pch '$(LOCAL_BUILT_PCH)'___________________________)
# Build PCH
$(call compile-cpp-source,$(LOCAL_PCH),$(LOCAL_BUILT_PCH).gch)
# All obj files are dependent on the PCH
$(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\
$($(LOCAL_OBJS_DIR)/$(call get-object-name,$(src)) : $(LOCAL_OBJS_DIR)/$(LOCAL_BUILT_PCH).gch)\
)
# Files from now on build with PCH
LOCAL_CPPFLAGS += -Winvalid-pch -include $(LOCAL_BUILT_PCH)
# Insert PCH dir at beginning of include search path
LOCAL_C_INCLUDES := \
$(LOCAL_OBJS_DIR) \
$(LOCAL_C_INCLUDES)
else
$(call ndk_log, ___________________________NO PCH for this module___________________________)
endif
- Вставьте следующие строки в файл android.mk вашего модуля:
PCH_FILE := symroot/src/Prefix.h
LOCAL_PCH := $(PCH_FILE)
LOCAL_CPPFLAGS += -DPCH
Поэтому мы помечаем наш модуль как имеющий предварительно скомпилированный заголовок с помощью флага компилятора -DPCH (сложно, но работает, когда в приложении много модулей).
Большинство решений взято отсюда: http://code.google.com/p/android/issues/detail?id=25412
ПРЕДУПРЕЖДЕНИЕ: после того, как я проделал это с моим проектом, это вообще не дало мне улучшения времени компиляции, и я обнаружил, что это происходит с предварительно скомпилированными заголовками gcc в некоторых проектах. Пока не могу себе это объяснить.
Если вы хотите просто включить какой-либо файл в каждый файл cpp, просто добавьте следующие строки в android.mk:
PCH_FILE := $(LOCAL_PATH)/symroot/src/Prefix.h
LOCAL_CPPFLAGS += -include $(PCH_FILE)
person
Sergey Leyko
schedule
29.11.2012
NDK
предоставленную систему сборки на простую, основанную наMSBuild.
. К ней было легко добавить поддержку предварительно скомпилированных заголовков, поскольку вы можете контролировать, куда помещаются файлы и какие параметры используются. Время полной сборки уменьшено с 3 до 1 минуты. Я оставляю вопрос открытым на случай, если у кого-нибудь получитсяAndroid.mk
- person Meh   schedule 02.03.2011