C++ Boost和Clang一起编译,认为它是由MinGW编译的

C++ Boost和Clang一起编译,认为它是由MinGW编译的,c++,boost,clang,C++,Boost,Clang,这是相当令人费解的。我在这台机器上的所有工作都使用MSVC,而只使用clang作为需要AST解析的工具 现在使用Clang,当我尝试解析包含一些Boost头的文件时,我得到以下结果: 找不到“\u mingw.h”文件 在win32.hpp中包含_mingw.h的行只应在定义u MINGW32_uuu时计算 我肯定不是自己定义的,也不是在我的项目文件中的任何地方定义的,所以我很茫然。我可以在哪里解决这个问题 调试这是相当棘手的,谷歌搜索主要是从实际使用MinGW的人那里获取信息,但在我的情况下,

这是相当令人费解的。我在这台机器上的所有工作都使用MSVC,而只使用clang作为需要AST解析的工具

现在使用Clang,当我尝试解析包含一些Boost头的文件时,我得到以下结果:

找不到“\u mingw.h”文件 在win32.hpp中包含_mingw.h的行只应在定义u MINGW32_uuu时计算

我肯定不是自己定义的,也不是在我的项目文件中的任何地方定义的,所以我很茫然。我可以在哪里解决这个问题


调试这是相当棘手的,谷歌搜索主要是从实际使用MinGW的人那里获取信息,但在我的情况下,没有人会把Clang误认为MinGW。

您包含的确切的Boost头文件是什么?你可以发布一个简单的例子来重现这个问题吗?我想当Clang是为windows构建的时候,Clang会将uu MINGW32_uuu定义为它的一个内置宏。您可能可以使用/U标志将其关闭,-U选项立即起作用!我真傻,我以为它不会工作,因为我猜它是后来在某个boost文件中定义的,所以我甚至没有尝试过。它发生在包括我真的不明白为什么叮当会定义这个?我相信他们是两个不同的编译器?这一直让人困惑的是,meMinGW不是一个编译器,正如它的名字所说,它是一个用于Windows的最小GNU环境。它包括GCC编译器。但是Clang for Windows也可以将其作为目标,在这种情况下,它预定义了uu MINGW32 uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?文件是不直接的。我应用了这里提到的所有标志:。但这并没有产生定义MSCVER而不是32的效果。。。。我设置的标志是-fdelayed template parsing-fms compatibility,-fms extensions和-fmsc version=1800