同じ問題があったので、解決策があります。まず、android.mk ファイルを変更してもできないようですので、ndk ビルド システムでファイルを変更する必要がありますが、これはあまり危険ではありません%)。このソリューションは r8b NDK でテストされています。そう:
- 次のコードを /build/core/build-binary.mk スクリプトの の前に追加します
# Build the sources to object files。
#プリコンパイル済みヘルパー:
ifeq ($(TARGET_ARCH_ABI),x86)
$(call set-src-files-target-cflags,$(LOCAL_PCH),)
そうしないと
$(call set-src-files-target-cflags,$(LOCAL_PCH),-mthumb)
終了
# 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))))
# PCH を obj ディレクトリにビルドします
LOCAL_BUILT_PCH := $(get-pch-name,$(LOCAL_PCH) を呼び出す)
$(call ndk_log, ___________________________Building pch '$(LOCAL_BUILT_PCH)'______________)
# PCH のビルド
$(call compile-cpp-source,$(LOCAL_PCH),$(LOCAL_BUILT_PCH).gch)
# すべての obj ファイルは 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)\
)
# これから PCH でビルドするファイル
LOCAL_CPPFLAGS += -Winvalid-pch -include $(LOCAL_BUILT_PCH)
# インクルード検索パスの先頭に PCH dir を挿入
LOCAL_C_INCLUDES := \
$(LOCAL_OBJS_DIR) \
$(LOCAL_C_INCLUDES)
そうしないと
$(ndk_log を呼び出す、___________________________このモジュールの PCH なし___________________________)
終了
- モジュールの 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)