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里使用预编译头(1)

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

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

这是.hxx文件

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

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

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

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

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

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

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

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页