같은 문제가 있었으므로 해결 방법이 있습니다. 우선, android.mk 파일을 변경하는 것으로는 할 수없는 것처럼 보이므로, ndk 빌드 시스템에서 파일을 변경해야하지만 매우 위험하지는 않습니다 %). 이 솔루션은 r8b NDK에서 테스트되었습니다. 그래서 :
- 는
# Build the sources to object files
전에 /build/core/build-binary.mk 스크립트에 다음 코드를 추가합니다 :
#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
그래서 우리는 PRECO를 가진 우리의 모듈을 표시 -DPCH 컴파일러 플래그가있는 mpiled 헤더 (까다 롭지 만 응용 프로그램에 많은 모듈이있는 경우 작동).
솔루션의 대부분은 여기에서 가져온 것입니다 : 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)
나는 대체'NDK'가 MSBuild를'를 기반으로 단순한 하나 빌드 시스템을 제공했다. '파일을 넣을 위치와 사용 된 옵션을 제어 할 수 있기 때문에 프리 컴파일 된 헤더에 대한 지원을 쉽게 추가 할 수있었습니다. 전체 빌드 시간이 3 분에서 1 분으로 감소했습니다. 누구나'Android.mk'로 성공한 경우를 대비하여 열어 둔 질문을 남겨두고 있습니다. – Meh
vs-android로 전환 할 수있는 옵션이 있다면, 미리 컴파일 된 헤더를 관리 할 수있었습니다. [여기] (http://qscribble.blogspot.ca/2012/05/precompiled-headers-in-vs-android.html)를 참조하십시오. – Qwertie
미리 컴파일 된 헤더 대신 사전 컴파일 된 소스 파일은 어떻습니까? [ccache] (http://ccache.samba.org/)에 시도해보십시오. – fadden