四时宝库

程序员的知识宝库

在cmake里使用预编译头(cmake指定编译器)

适当地使用预编译头可以提高项目的编译速度。

由于微软的编译器和gcc/clang编译器在使用预编译头的方式上有所不同,手动实现比较麻烦。

好在cmake从3.16开始,原生支持预编译头。CMakeLists.txt里面不再需要有额外的分支来处理差异。

cmake_minimum_required(VERSION 3.16.0)

project(HelloWorld)

add_executable(HelloWorld main.cpp abc.cpp)

set_directory_properties(PROPERTIES VS_STARTUP_PROJECT HelloWorld)

这里的两个文件都include了<iostream>,所以理论上使用预编译头能够适当提高编译速度,当然这个差别可能太小,根本看不出来。

在CMakeLists.txt里面添加

target_precompile_headers(
    HelloWorld
    PRIVATE
        <iostream>
)

生成Visual Studio solution文件。


打开项目,可以看到cmake帮你自动生成了cmake_pch.hxx和cmake_pch.cxx文件,用于生成真正的预编译头文件。



这是.hxx文件


.cxx文件其实是个空文件,主要是微软的编译器需要一个cpp文件进行编译预编译头。



我试了一下,当不使用预编译头的时候,编译项目花了1.20sec


使用预编译头之后,只有0.76sec


当然这样的小项目,这个数据不说明任何问题,不过如果在大型项目,某些头文件被大量引用的话,还是能产生比较可观的性能提升的。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接