摘自 http://38288890.blog.163.com/blog/static/19612845320081164495863/
做C++的项目的时候最怕的就是编译速度缓慢,前段时间一直抱怨C++/CLI编译OSG项目速度很慢很慢,我以为是OSG的inline函数过多的问题,但确实也是这个问题,每次处理的时候都要处理很多的inline,造成了编译速度的缓慢,往往修改一个文件整个工程都要重新编译,那速度可想而知。但总也要有一个解决方案啊,以前知道预编译头能够加速工程的编译,但是我设置了预编译头,怎么还是那么慢呢?肯定是我使用方法不对。
在网上Google了一圈以后找到了预编译头的正确使用,感谢作者的启迪。
引用最重要的部分:
如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法.
1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)
原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编译速度.
2) 在其他的头文件里也include 预编译头文件
假设你的其他头文件也include了预编译头文件, 如果别人引用你的这个头文件又没有设置成预编译头文件, 那引用你头文件的这个人就煎熬了.
原 因:由于你用到的.h文件里include了预编译头文件,他在他本身的project里,vs能够判断的出他是预编译头,也能找的到需要的pch, pdb文件。所以对写这个.h文件的人没影响。但是你作为他的客户,你工作在你的project下,你include了他的h头文件,而这时vs判断不出 他的头文件里include的stdafx是预编译头文件,做普通文件编。那可想而知,他的stdafx里如果有import外面大型的库(如 inventor的tlb,非常慢,我们犯了这个错),那编译速度简直是煎熬。最要命的是,以后你做任何简单的修改都要重编,这和预编译解决的问题恰好相 反了。
下面给出一个使用预编译头文件的操作步骤, 享受一下预编译头文件给我们带来的编译速度的提升:
1) 添加一个stdafx.h文件(名字随便取, 这里用了VS默认提供的名称), 在这个.h文件里include要使用的头文件(一般是外部的库, 自己写的不常变的头文件也可以加进来)
2) 添加一个stdafx.cpp文件, 并include "stdafx.h"
3)项目属性-->c/c++-->Precompiled设置为Use Precompiled Header, stdafx.h
4)stdafx.cpp属性-->c/c++->Precompiled设置为Create Precompiled Header, stdafx.h
done!
试了一下改动一点点东西需要编译3分钟的项目,现在瞬间完成!!终于起作用了!
相关推荐
### 预编译头文件详解 #### 一、预编译头文件概念...正确配置并使用预编译头文件不仅可以减少编译时间,还能提高开发效率。然而,在实际应用中也需要注意维护预编译头文件的一致性和有效性,以避免出现不必要的问题。
预编译头(Precompiled Header,PCH)是C++编程中提高编译效率的一种技术。它的核心思想是将项目中频繁使用且不常改动的头文件预先编译成一个二...正确理解和使用预编译头,可以帮助开发者优化编译流程,提高开发效率。
2. **检查配置**:确保所有源文件的“使用预编译头”设置相同,并且预编译头文件的路径正确无误。可以在项目的属性页中进行检查和修改。 3. **调整包含顺序**:确保每个源文件中包含预编译头的语句位于所有其他包含...
C++预编译命令详解 预编译命令是C语言和C++语言中非常重要的一部分,它们可以在编译前对代码进行处理和修改,从而影响编译器的行为。本文将详细介绍各种C++预编译命令,包括#pragma指令的多种用法。 #pragma指令 ...
2. **配置和链接**:在项目设置中,需要正确配置包含路径和库路径,以引用预编译的 OpenSSL 库文件。 3. **安全更新**:新版本通常修复了已知的安全漏洞,因此升级到 OpenSSL 3.0.0 可以提高系统的安全性。 4. **...
预编译还会处理作用域和闭包,确保在正确的作用域内查找和使用变量,这对于理解函数执行上下文和闭包行为至关重要。 9. **类型检查与静态类型系统** 使用TypeScript等静态类型系统,预编译期间可以进行类型检查,...
在编程领域,尤其是在使用Microsoft Visual Studio (VS) 进行C++开发时,"预编译头"(Precompiled Headers,简称PCH)是一个重要的优化技术。预编译头能够显著提升编译速度,因为它允许编译器预先处理常用且不经常...
《C语言预编译详解》 C语言的预编译机制是其独特之处,它将编译过程分为预处理和正式编译两个阶段。预处理阶段主要负责处理以符号“#”开头的预处理指令,这些指令不涉及语法和语义的检查,而是对源代码进行初步...
在使用Cocos2d-x进行项目开发时,预编译配置是一个关键环节,能够显著提升开发效率,减少编译时间和避免不必要的重复编译工作。 预编译配置的核心目的是优化构建过程,它通过预先编译部分不经常变动的代码和资源,...
SQL预编译是数据库操作中的一个重要概念,尤其是在Java开发中,使用像iBatis这样的持久层框架时,解决SQL注入问题的关键技术之一。SQL注入是一种常见的安全漏洞,它允许攻击者通过恶意输入修改SQL语句的执行逻辑,...
标题:C语言预编译命令用法 描述与知识点详解: C语言的预编译命令在编程中扮演着至关重要的角色,它们允许开发者在编译阶段执行一系列操作,包括但不限于宏定义、条件编译和文件包含等。在给定的描述中提到的“#...
C++预编译指令是编程过程中非常重要的工具,它们允许程序员根据特定的条件来控制代码的编译过程。本文将详细介绍四个主要的预编译...正确使用这些预编译指令能够提高代码的可维护性和效率,同时降低潜在的编译错误。
在预编译中使用 like 时,需要在值的地方加 % 号,以便正确地实现模糊查询。例如,String sql = "select * from t_Content where title like ?";ResultSet rs;rs = null;try {rs = db.getResult(sql, new String[]{...
在Microsoft Foundation Class (MFC)库中,`stdafx.h`是一个非常关键的头文件,它在...理解和正确使用预编译头是优化MFC项目构建过程的关键,尤其是在大型项目中,这可以显著减少开发者等待编译的时间,提高开发效率。
预编译指令是C语言编程中非常重要的组成部分,它们在实际编译之前对源代码进行预处理,执行一些基本的转换操作,以增强代码的可读性和灵活性。...正确使用预编译指令可以极大地提升编程效率和代码质量。
总之,宏定义是C语言中一个强大的预编译特性,合理地使用宏定义可以极大地提高代码的可读性和可维护性,但在使用时也应注意其潜在的问题,如参数替换导致的语法错误,以确保代码的正确性和稳定性。
预编译库的好处在于用户可以直接使用,无需自行编译源代码,简化了软件开发过程,尤其是对于不熟悉编译流程的开发者来说更为便利。 动态链接和静态链接是两种不同的库使用方式。动态链接库(.so文件,在Unix-like...
在C++编程语言中,宏和预编译...通过实践,可以更好地掌握何时使用宏、如何编写安全的宏,以及如何有效利用预编译功能优化代码。同时,解决这些题目也将帮助开发者养成良好的编程习惯,避免因滥用宏而引入的潜在问题。
2. **LICENSE**:包含了软件的许可协议,详细说明了你可以如何使用、修改和分发这个预编译的MXNet版本。通常,Apache 2.0许可证允许商业和非商业用途,但具体条款应在文件中详细阅读。 3. **README.txt**:这是关于...
然而,正确理解和使用预编译技术,以及根据实际需求选择合适的预编译类型,对于优化Web服务至关重要。在实际操作中,开发人员应根据项目特点、服务器配置和性能要求,灵活运用预编译策略,确保网站的高效运行。