我最近切换到Visual Studio 2010和Intellisense在使用boost
库时不显示半分钟,Microsoft's suggestion似乎使用预编译头。
除了之前我从未使用过它们(除非被Ugly ATL Wizards(TM)强迫),所以我四处寻找它们是如何工作的。
基本上,大集中stdafx.h
方法似乎是完全错误的。我从不想在所有来源中包含(甚至便宜)一大堆头文件。由于我不使用Windows库(我使用C ++ / CLI更高级别的包装器,然后使用.NET与外界交谈),我没有“一整套不变的巨大标头”。只需boost
和标准库标题。
这个问题有an interesting approach,但我无法弄清楚如何使这项工作。似乎每个源文件必须编译两次(如果我错了,请纠正我):一次使用/ Yc,一次使用/ Yu。这增加了开发人员的负担,必须手动调整构建系统。
我希望找到一些“为每个源文件自动生成一个预编译的头文件”技巧,或者至少是一些“最佳实践”,但大多数人似乎都乐意将这个世界包含在stdafx.h
中。
我可以在每个源文件的基础上使用预编译头文件有哪些选项?我并不关心构建时间(只要它们不会飙升),我只是希望intellisense能够快速。
答案 0 :(得分:9)
对于初学者来说,你正在读错了文章。每个文件都没有编译两次。文件stdafx.cpp在/ Yc(c,for create)之前编译一次,然后项目中的每个其他文件用/ Yu(u,for use)编译一次,并导入先前创建的保存状态的结果来自stdafx.cpp。
其次,这篇文章已经有7年了,正在谈论VC ++ 6,所以你应该开始不信任它。但即使假设其中的信息仍然适用于VC ++ 2008或2010,它似乎是不好的建议。它建议使用/pragma hdrstop
的方法是寻找问题的解决方案。如果您的标题包含您不希望在每个文件中包含的内容,那么它们就不应该放入预编译的标题中。
答案 1 :(得分:5)
你的问题基本上似乎是在VS2010中Intellisense的Boost速度很慢?我没有这个问题的直接解决方案,但Visual Assist X可以选择吗?我现在在各种版本的Visual Studio中使用它并且非常愉快。不是直接的解决方案,但它可能适合您。
答案 2 :(得分:4)
如果正确使用 ,预编译标题也不会太糟糕。
不要将它们用作正确和精确的#includes的替代品,而是作为一种加快速度的方法。通过使预编译的头在发布版本中不执行任何操作来实现此目的,只是在调试中加快速度。
答案 3 :(得分:3)
你错了,每个文件只编译一次。你有一个用/ Yc编译的.cpp文件,其余的是用/ Yu编译的.cpp文件。带/ Yc的文件,默认为stdafx.cpp,包含一行#include“myMainHeader.h”(更改默认名称)所有其他.cpp文件必须以#include“myMainHeader.h”开头。编译/ yc文件,保存编译器的整个内部状态。编译每个其他文件时会加载该文件。这就是为什么你必须从包含PCH开始,以便/ Yu选项不会改变编译结果,只改变时间。 Xcode没有提出此要求,并且无论您的.cpp文件是否以正确的include指令开头,都将使用PCH。我使用了依赖于它的库,如果没有PCH就无法构建。