预编译头文件(precompiled header)使用经验

预编译头文件能提高编译性能,存储稳定代码以供后续编译快速加载。本文介绍了在CMake环境中配置预编译头文件的方法,包括遇到的mac下Objective-C不支持的问题及其解决方案,如使用`target_precompile_headers`命令并针对.m及.mm文件设置`SKIP_PRECOMPILE_HEADERS`属性。

       预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能。在随后的编译中,编译器将加载存储状态继续编译指定的文件。每一个随后的编译将更快,因为稳定的代码不需要再次编译。预编译头文件应该将稳定和静态(译者注:例如,Qt库头文件、第三方库头文件、自定义的不经常改动的头文件)的代码包含在你工程中详细可以(参考:https://jingyan.baidu.com/article/ab69b270b82c352ca7189fbe.html

qmake中可以增加下列语句支持

CONFIG += precompile_header

本文主要记录在cmake环境下支持precompile_header的配置。通过参考cmake官方文档(target_precompile_headers — CMake 3.16.9 Documentation)可以看到,目前支持add_executable() or add_library() ,且不能是别名 ALIAS target.

例如我们可以加入下面配置来支持precompile_header

target_precompile_headers(${PROJECT_NAME} PRIVATE "${PCH_PATH}")

上面配置后,有一个问题,在mac下,如果有object-c的代码的时候,如果出现如下错误:

error: Objective-C was disabled in PCH file but is currently enabled

此错误说明Objective-C 不支持precompile_header,通过过官方对target_precompile_headers的说明,最后一段提供了解决方案

于是我们点击进入SKIP_PRECOMPILE_HEADERS文档

因此我们需要对Objective-C 的代码(.m和.mm文件)需要特殊处理,例如:

set_source_files_properties(test.mm

PROPERTIES

SKIP_PRECOMPILE_HEADERS "ON"

)

这样就完美解决cmake在mac下对precompile_header的支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值