C:在Visual Studio和Eclipse+MinGW中预编译的头文件
C : Pre-compiled header file in Visual Studio and Eclipse+MinGW
我目前正在为我的C++项目使用Visual Sstudio 2010和Eclipse+MinGW。我经历过不同的编译器行为,这需要你的解释。这里有一个例子:
假设我有a.h
和a.cpp
。我已经预编译了头文件(即VS中的stdafx.h
和Eclipse中的precomp.h
(我为Eclipse创建了一个))。我将在预编译的头文件中包括一些基本的头文件(例如,opencv中的core.hpp)。在a.h
和a.cpp
中,我将使用在基本头文件中声明的一些类(例如,opencv中的Mat),这些类包含在预编译的头文件中。
对于VisualStudio2010,我必须将stdafx.h放在每个.cpp文件中(如链接中所示)。所以在a.cpp
中,我一开始就有这个:
#include "stdafx.h"
#include "a.h"
此外,我不在a.h
中包含stdafx.h
。我原以为编译器找不到在基本头文件中声明的类,但事实证明,在VS下编译很好。根本没有错误。
对于Eclipse+MinGW,我确实喜欢这样:在a.h
中,我将#include "precomp.h"
放在开头。在a.cpp中,我只放置#include "a.h"
(正如一些朋友所说,这是包含头文件的C++标准方式)。经过编译,这是没有错误的,这是毫无疑问的。但是,如果我的操作与我为Visual Studio所做的操作类似,即我不在a.h
中包含precomp.h
。将出现错误,表明某些类未在此范围内声明。As concerned by @MSalters, I should **highlight** that both a.h and a.cpp contain proper declarations and definitions.
所以有人能帮我解释VS和Eclipse+MinGW的区别吗?非常感谢。
预编译头是一种效率衡量标准。如果编译器使用正常方法编译代码,则代码应该仍然有效。特别是,您的Visual C++代码应该在Eclipse上编译,反之亦然。
我强烈怀疑您的问题出在Eclipse方面。为什么
a.cpp
实际上是空的?它应该包含a.h
中所有声明的定义
如果你包含"precomp.h",它可能应该在"a.h"的内容之前。一种是按此顺序包含两个标头(Visual Studio样式),另一种是在"a.h"中的任何声明之前包含"precomp.h"。(MinGW样式)
MinGW中预编译的规则稍微宽松一些,因为它预编译较少。
- 使用 MEX 编译C++文件
- 获取 clang++:错误:在编译文件系统库的代码时
- 如何交叉编译C++文件
- 使用 MinGW 在 Windows 上的命令行编译C++文件
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 解析模板和范围后获取编译文件?
- 我的 PowerShell 脚本无法按预期工作(用于编译C++文件)
- 如何在不制作Visual Studio 2017项目的情况下编译C++文件?
- 'void *' 'void (*) (bool)' 指针使用 c ++ 编译器在 C 中编译文件的错误
- 在没有节点GYP的目标平台上编译C/C 文件
- 生成文件似乎以错误的顺序编译文件
- 编译 C++ 文件失败,因为找不到"ssize_t"的定义
- NeatBeans Makefile:麻烦编译.H文件
- 我无法编译文件系统库
- 在不使用预编译头C++项目中编译 C 文件
- 无法使用 Xcode 和终端在 Mac OS 上使用 OpenGL 库编译 c++ 文件
- 获取编译文件的列表,并由Make Project包含
- MinGW .h 编译文件不起作用:此文件的版本与您运行的 Windows 版本不兼容
- 编译 c++ 文件时出错:未定义的符号
- C++编译文件