Android NDK中使用预编译头文件
使用预编译头(Precompiled Header,简称PCH)可以加快c/c++代码编译。
那么Android NDK编译native代码时,如何开启PCH?请客官往下看!
** 特别说明:** 我使用的 NDK r13b,较低版本的NDK可能不支持,具体是哪个版本开始,我没深究。
方法步骤
创建 prefix.h
pch 头文件定义,不一定是"prefix.h",可以自定。
把你项目中公共使用的不常修改的标准库、第三方库等头文件放入 prefix.h
#ifndef __PCH_HEADER
#define __PCH_HEADER
#include <memory>
#include <list>
#include ...
#endif //!__PCH_HEADER
prefix.h不需要在你项目的 .h .cpp等中include, NDK在编译时,为当前启用pch的模块所有源代码最前面自动加上这个头文件。
修改 Android.mk
Android.mk需要开启PCH的模块中加入 pch 头文件定义,不同模块可以分开定义。
LOCAL_PCH := $(YOUR_PCH_FILE_DIR)/prefix.h
进行编译
正常使用ndk-build,就可以启用到PCH了,就这么简单。 你可以看到会先编译prefix.h成PCH文件,再编译其他源代码。
你可以在obj里面找到含有 precompiled 的一个文件。
存在的问题
目前GCC的PCH文件(预编译后的头文件,不是上面所举的prefix.h)不能超过128MB,不然编译时cc1plus会crash。
使用clang没有这个问题,貌似google也不打算解决gcc的限制问题,而是建议切换到clang。毕竟GCC已被Google打入冷宫。
如果你必须使用gcc,那么当PCH文件超过128MB时,可以适当减少 pch.h 里面的头文件,让PCH文件小于128MB。