16

Android 用に大きな C++ プロジェクトを移植しVisual Studioています。GCCファイル数が多いため、コンパイル時間は非常に遅くなります。プリコンパイル済みヘッダー ファイルをセットアップしたいのですが、GCC のドキュメントが分かりにくいと思います。

プリコンパイル済みstdafx.hヘッダーのベースとなるファイルがあり、すべての.cppソースに最初に含まれるファイルです。これを機能させるために何を追加する必要があるか知っている人はいますAndroid.mkか?

4

1 に答える 1

10

同じ問題があったので、解決策があります。まず、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)

于 2012-11-29T10:37:42.603 に答える