我有一个基于Visual Studio C++的程序,它使用预编译的头文件(stdafx.h).现在我们使用gcc 4.x将应用程序移植到Linux.
问题是如何在两种环境中处理预编译的头文件.我用Google搜索但无法得出结论.
显然,我希望stdafx.h在Visual Studio中保留,因为代码库非常大,预编译的头文件可以增加编译时间.
但问题是在Linux中该怎么做.这是我发现的:
stdafx.h原样.gcc比VC++编译代码要快得多(或者只是我的Linux机器更强...... :)),所以我对这个选项很满意.从这里使用方法- stdafx.h看起来像(USE_PRECOMPILED_HEADER仅为VS 设置):
#ifdef USE_PRECOMPILED_HEADER
... my stuff
#endif
Run Code Online (Sandbox Code Playgroud)使用此处的方法- 编译VC++ /FI以隐式包含stdafx.h在每个cpp文件中.因此,在VS中,您的代码可以轻松切换,无需预编译头文件即可编译,无需更改代码.
我个人不喜欢依赖,而这个混乱stdafx.h正在推动一个庞大的代码库.因此,该选项对我很有吸引力 - 在你没有的Linux上stdafx.h,同时仍然/FI只能在VS上打开预编译的头文件.
stdafx.h只作为预编译头(模仿Visual Studio)你的意见?还有其他方法可以解决这个问题吗?
我理解预编译的头文件正在使用"#include"StdAfx.h"并且是的,我知道我可以关闭它们.但这不是我的问题.
如果您使用预编译头文件,Visual C++要求每个 cpp文件#include"StdAfx.h",甚至是不使用StdAfx.h中任何头文件的文件.如果您忘记在一个文件中包含StdAfx.h,则会出错.但为什么?显而易见的方法就是"如果你包含StdAfx.h,那么该文件将使用它,但如果你忘记包含它,那么这些头文件就不会被包含在内." 我不明白为什么VC++会要求你在不需要的时候包含StdAfx.h.似乎它们更容易像普通的头文件一样对待它.
有什么理由需要这个吗?
c++ precompiled-headers stdafx.h visual-studio-2012 visual-studio-2015