预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能。在随后的编译中,编译器将加载存储状态继续编译指定的文件。每一个随后的编译将更快,因为稳定的代码不需要再次编译。预编译头文件应该将稳定和静态(译者注:例如,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的支持

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

被折叠的 条评论
为什么被折叠?



