• visual studio 生成预编译头节省编译时间


    预编译头(precompiled header)是程序设计时把头文件编译为中间格式(如目标文件),以节约在开发过程中编译器反复编译该头文件的开销。 C语言、C++语言、Objective C语言等都有类似的技术。
    有的头文件包含了巨量的源代码(如著名的windows.h),或者使用模板编程时要生成巨大的头文件模板库(如Eigen math library与Boost C++ libraries)。为减少编译时间,某些编译器允许把头文件编译为某种中间形式称为预编译头(precompiled header),后续再编译源文件时就可以尽量直接使用这些预编译头。
    以下演示在visual studio 中启用生成预编译头,节省编译时间。

    • 打开编译时间计时

      【工具】【选项】然后如下设置

      

    • 创建测试头文件

      创建stdafx.h文件引用常用的头文件,stdafx是standard application framework extension的缩写。

    #pragma once
    #include <iostream>
    #include <string>
    #include <vector>
    #include <chrono>
    #include <unordered_map>
    #include <map>
    #include <algorithm>
    #include <memory>
    #include <random>
    #include <thread>
    #include <list>
    #include <tuple>
    

      创建stdafx.cpp文件引入stdafx.h的头文件

    #include "stdafx.h"
    

      创建main函数的cpp文件,试用stdafx.h

    #include "stdafx.h"
    
    int main()
    {
        std::cout << "Hello World
    ";
    }
    

    如下所示:

    • 测试编译时间
    已启动生成…
    1>------ 已启动生成: 项目: ConsoleApplication1, 配置: Debug Win32 ------
    1>stdafx.cpp
    1>ConsoleApplication1.cpp
    1>
    1>项目性能摘要:
    1>     1775 毫秒 C:Usersxunwusource
    eposConsoleApplication1ConsoleApplication1.vcxproj   1 次调用
    1>
    1>目标性能摘要:
    1>        0 毫秒 _SplitProjectReferencesByFileExistence     1 次调用
    1>        0 毫秒 AfterResolveReferences                     1 次调用
    1>        0 毫秒 ResolveAssemblyReferences                  1 次调用
    1>        0 毫秒 ExpandSDKReferences                        1 次调用
    1>        0 毫秒 ResolveSDKReferences                       1 次调用
    1>        0 毫秒 ResolveProjectReferences                   1 次调用
    1>        0 毫秒 PrepareProjectReferences                   1 次调用
    1>        0 毫秒 SelectClCompile                            1 次调用
    1>        0 毫秒 GetReferencedVCProjectsInfo                1 次调用
    1>        0 毫秒 BeforeResolveReferences                    1 次调用
    1>        0 毫秒 ResolveReferences                          1 次调用
    1>        0 毫秒 ComputeCLInputPDBName                      1 次调用
    1>        0 毫秒 _SelectedFiles                             1 次调用
    1>        0 毫秒 ComputeReferenceCLInput                    1 次调用
    1>        0 毫秒 SelectCustomBuild                          1 次调用
    1>        0 毫秒 SetCABuildNativeEnvironmentVariables       1 次调用
    1>        0 毫秒 GetFrameworkPaths                          1 次调用
    1>        0 毫秒 _CheckWindowsSDKInstalled                  1 次调用
    1>        0 毫秒 GetResolvedWinMD                           1 次调用
    1>        0 毫秒 _PrepareForReferenceResolution             1 次调用
    1>        0 毫秒 ComputeMIDLGeneratedCompileInputs          1 次调用
    1>        0 毫秒 FindReferenceAssembliesForReferences       1 次调用
    1>        1 毫秒 GetReferenceAssemblyPaths                  1 次调用
    1>        1 毫秒 _GetProjectReferenceTargetFrameworkProperties   1 次调用
    1>        1 毫秒 FixupCLCompileOptions                      1 次调用
    1>        1 毫秒 SetBuildDefaultEnvironmentVariables        1 次调用
    1>        1 毫秒 AssignProjectConfiguration                 1 次调用
    1>        1 毫秒 WarnCompileDuplicatedFilename              1 次调用
    1>        2 毫秒 InitializeBuildStatus                      1 次调用
    1>        2 毫秒 _CheckForInvalidConfigurationAndPlatform   1 次调用
    1>        7 毫秒 PrepareForBuild                            1 次调用
    1>     1754 毫秒 ClCompile                                  1 次调用
    1>
    1>任务性能摘要:
    1>        0 毫秒 SetEnv                                     5 次调用
    1>        0 毫秒 MakeDir                                    2 次调用
    1>        0 毫秒 WriteLinesToFile                           1 次调用
    1>        0 毫秒 Touch                                      1 次调用
    1>        0 毫秒 AssignProjectConfiguration                 1 次调用
    1>        0 毫秒 MSBuild                                    1 次调用
    1>        1 毫秒 ReadLinesFromFile                          1 次调用
    1>        1 毫秒 Delete                                     2 次调用
    1>        1 毫秒 Message                                    2 次调用
    1>        1 毫秒 CheckVCToolsetVersion                      1 次调用
    1>     1752 毫秒 CL                                         2 次调用
    ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
    

      

      耗时1775ms

    • 启用预编译头

      右击stdafx.cpp文件【属性】【预编译头】【预编译头】选择创建,注意是创建,不是使用

    点击确定,应用,然后关闭

    启用项目的预编译头,右击项目【属性】此处设置,预编译头为使用。

    • 测试编译时间

    首次编译会生成预编译头

    已启动生成…
    1>------ 已启动生成: 项目: ConsoleApplication1, 配置: Debug Win32 ------
    1>stdafx.cpp
    1>ConsoleApplication1.cpp
    1>
    1>项目性能摘要:
    1>     1732 毫秒 C:Usersxunwusource
    eposConsoleApplication1ConsoleApplication1.vcxproj   1 次调用
    1>
    1>目标性能摘要:
    1>        0 毫秒 _SplitProjectReferencesByFileExistence     1 次调用
    1>        0 毫秒 ResolveAssemblyReferences                  1 次调用
    1>        0 毫秒 ExpandSDKReferences                        1 次调用
    1>        0 毫秒 ResolveSDKReferences                       1 次调用
    1>        0 毫秒 FindReferenceAssembliesForReferences       1 次调用
    1>        0 毫秒 PrepareProjectReferences                   1 次调用
    1>        0 毫秒 GetReferencedVCProjectsInfo                1 次调用
    1>        0 毫秒 SelectClCompile                            1 次调用
    1>        0 毫秒 AssignProjectConfiguration                 1 次调用
    1>        0 毫秒 BeforeResolveReferences                    1 次调用
    1>        0 毫秒 ComputeCLInputPDBName                      1 次调用
    1>        0 毫秒 ComputeMIDLGeneratedCompileInputs          1 次调用
    1>        0 毫秒 _SelectedFiles                             1 次调用
    1>        0 毫秒 ComputeReferenceCLInput                    1 次调用
    1>        0 毫秒 WarnCompileDuplicatedFilename              1 次调用
    1>        0 毫秒 SelectCustomBuild                          1 次调用
    1>        0 毫秒 SetCABuildNativeEnvironmentVariables       1 次调用
    1>        0 毫秒 GetReferenceAssemblyPaths                  1 次调用
    1>        0 毫秒 GetFrameworkPaths                          1 次调用
    1>        0 毫秒 _CheckWindowsSDKInstalled                  1 次调用
    1>        0 毫秒 GetResolvedWinMD                           1 次调用
    1>        0 毫秒 _PrepareForReferenceResolution             1 次调用
    1>        0 毫秒 AfterResolveReferences                     1 次调用
    1>        0 毫秒 ResolveReferences                          1 次调用
    1>        1 毫秒 SetBuildDefaultEnvironmentVariables        1 次调用
    1>        1 毫秒 _GetProjectReferenceTargetFrameworkProperties   1 次调用
    1>        1 毫秒 ResolveProjectReferences                   1 次调用
    1>        1 毫秒 _CheckForInvalidConfigurationAndPlatform   1 次调用
    1>        2 毫秒 InitializeBuildStatus                      1 次调用
    1>        2 毫秒 FixupCLCompileOptions                      1 次调用
    1>       15 毫秒 PrepareForBuild                            1 次调用
    1>     1705 毫秒 ClCompile                                  1 次调用
    1>
    1>任务性能摘要:
    1>        0 毫秒 Message                                    2 次调用
    1>        0 毫秒 MakeDir                                    2 次调用
    1>        0 毫秒 CheckVCToolsetVersion                      1 次调用
    1>        0 毫秒 ReadLinesFromFile                          1 次调用
    1>        0 毫秒 AssignProjectConfiguration                 1 次调用
    1>        0 毫秒 MSBuild                                    1 次调用
    1>        0 毫秒 Delete                                     2 次调用
    1>        1 毫秒 SetEnv                                     5 次调用
    1>        1 毫秒 Touch                                      1 次调用
    1>        1 毫秒 WriteLinesToFile                           1 次调用
    1>     1704 毫秒 CL                                         2 次调用
    ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
    

      第二次编译:

    已启动生成…
    1>------ 已启动生成: 项目: ConsoleApplication1, 配置: Debug Win32 ------
    1>ConsoleApplication1.cpp
    1>
    1>项目性能摘要:
    1>      884 毫秒 C:Usersxunwusource
    eposConsoleApplication1ConsoleApplication1.vcxproj   1 次调用
    1>
    1>目标性能摘要:
    1>        0 毫秒 _SplitProjectReferencesByFileExistence     1 次调用
    1>        0 毫秒 ResolveAssemblyReferences                  1 次调用
    1>        0 毫秒 ExpandSDKReferences                        1 次调用
    1>        0 毫秒 ResolveSDKReferences                       1 次调用
    1>        0 毫秒 ResolveProjectReferences                   1 次调用
    1>        0 毫秒 PrepareProjectReferences                   1 次调用
    1>        0 毫秒 FindReferenceAssembliesForReferences       1 次调用
    1>        0 毫秒 SelectClCompile                            1 次调用
    1>        0 毫秒 AssignProjectConfiguration                 1 次调用
    1>        0 毫秒 BeforeResolveReferences                    1 次调用
    1>        0 毫秒 ComputeCLInputPDBName                      1 次调用
    1>        0 毫秒 ComputeMIDLGeneratedCompileInputs          1 次调用
    1>        0 毫秒 _SelectedFiles                             1 次调用
    1>        0 毫秒 GetReferencedVCProjectsInfo                1 次调用
    1>        0 毫秒 ComputeReferenceCLInput                    1 次调用
    1>        0 毫秒 WarnCompileDuplicatedFilename              1 次调用
    1>        0 毫秒 SetCABuildNativeEnvironmentVariables       1 次调用
    1>        0 毫秒 GetReferenceAssemblyPaths                  1 次调用
    1>        0 毫秒 GetFrameworkPaths                          1 次调用
    1>        0 毫秒 SelectCustomBuild                          1 次调用
    1>        0 毫秒 GetResolvedWinMD                           1 次调用
    1>        0 毫秒 _PrepareForReferenceResolution             1 次调用
    1>        0 毫秒 AfterResolveReferences                     1 次调用
    1>        0 毫秒 ResolveReferences                          1 次调用
    1>        1 毫秒 SetBuildDefaultEnvironmentVariables        1 次调用
    1>        1 毫秒 _CheckForInvalidConfigurationAndPlatform   1 次调用
    1>        1 毫秒 _CheckWindowsSDKInstalled                  1 次调用
    1>        1 毫秒 _GetProjectReferenceTargetFrameworkProperties   1 次调用
    1>        1 毫秒 FixupCLCompileOptions                      1 次调用
    1>        2 毫秒 InitializeBuildStatus                      1 次调用
    1>        8 毫秒 PrepareForBuild                            1 次调用
    1>      865 毫秒 ClCompile                                  1 次调用
    1>
    1>任务性能摘要:
    1>        0 毫秒 Message                                    2 次调用
    1>        0 毫秒 CheckVCToolsetVersion                      1 次调用
    1>        0 毫秒 ReadLinesFromFile                          1 次调用
    1>        0 毫秒 AssignProjectConfiguration                 1 次调用
    1>        0 毫秒 MSBuild                                    1 次调用
    1>        1 毫秒 SetEnv                                     5 次调用
    1>        1 毫秒 MakeDir                                    2 次调用
    1>        1 毫秒 WriteLinesToFile                           1 次调用
    1>        1 毫秒 Touch                                      1 次调用
    1>      864 毫秒 CL                                         2 次调用
    ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
    

      时间减半!

  • 相关阅读:
    【转】win7“您可能没有权限使用网络资源”的解决办法
    windows下顽固软件卸载不了的解决方法
    【转】Windows Server 2008修改远程桌面连接数
    winserver2008,运行可执行文件,提示 激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.DebugCRT,processorArchitecture="x86"
    保障视频4G传输的流畅性,海康威视摄像头相关设置
    【转】win7如何设置共享目录,并且访问不需要输入用户名和密码。
    CentOS7.1配置远程桌面
    C++遍历目录,并把目录里超过7天的文件删除(跨平台windows&linux)
    hibernate(二)一级缓存和三种状态解析
    Android进程间的通信之AIDL
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/14015091.html
Copyright © 2020-2023  润新知