当我在预编译的头文件中包含<boost/numeric/odeint/integrate/integrate.hpp>
并使用Mingw4.9.2-32bit(来自Qt 5.4)编译时,我无法编译我的项目。预编译文件大约200 MB(巨大!)。我从编译器得到的错误信息是
Makefile.Debug:1698: recipe for target 'debug/main.o' failed
mingw32-make[1]: *** [debug/main.o] Error 1
从这个相关的问题 PRECOMPILED HEADERS not working in debug build with Qt Creator / qmake / MinGw 我知道编译失败的原因是因为文件很大。但!为什么这个文件太大了?有没有办法减少编译的头文件大小?
当我使用MSVC 2013编译代码时,我没有遇到此问题,预编译的头文件大约为40 MB(合理)。当我使用clang在MacOS 10.10中编译时,我也没有遇到这个问题。
从本质上讲,我尝试做的是在使用Odeint时加快编译时间。如果还有其他方式,请告诉我。
这是我的预编译标题的样子
// pre compiled header
#ifndef PCH_H
#define PCH_H
//-----------------------------------------------
// Add C includes here
//-----------------------------------------------
// Add C++ includes here
#ifdef __cplusplus
#include <boost/array.hpp>
#include <boost/numeric/odeint/integrate/integrate.hpp>
using namespace boost::numeric::odeint;
#endif //__cplusplus
#endif // PCH_H
更新 我认为原因在于boost和Odeint都是模板化程度较高的库,不知何故,32位Mingw编译器(下面的gcc)无法处理那么多的sutff(?!?)。也许64位版本的Mingw会更好用吗? BTW,昨天我用Mac上的clang编译了预编译头文件编译过程,编译按预期成功完成,执行时间太棒了:第一次编译时间不超过10秒,然后PCH完成后花费的时间少于每次迭代重新编译1秒,在Windows上使用MSVC我第一次大约需要20秒,重新编译需要10秒,当然在Mingw上我甚至无法编译。