Ответ 1
Была та же проблема, поэтому есть решение. Прежде всего, поскольку, похоже, вы не можете это сделать с изменением файлов android.mk, вы должны изменить файл в построенной системе ndk, но это не очень опасно.%). Это решение протестировано на r8b NDK. Итак:
- Добавьте следующий код в файл /build/core/build -binary.mk script, перед
# 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)