2016-09-20 153 views
0

:)非常感谢。将C++(.cpp)编译为.exe文件

我期待转换成一个.cpp文件.exe文件。

我试着(MingW平台)gcc和g ++。我也尝试在Visual Studio中手动编译它。

不幸的是这些编译失败(包括Linux和Windows上),因为预编译的头不能定位:

stdafx.h: No such file or directory 

我已经试过手动下载(预编译头:#包括)和更改#include <stdafx.h>#include "stdafx.h"指向手动下载的预读器的当前文件夹。这个'工作',但它编译与大量的错误,可能是因为它是一个错误版本的标题(只有我可以找到标题是在https://sourceforge.net

必须有一个更简单的方法?

+4

预编译头'是一个Visual Studio的事情。如果您在Visual Studio中正确创建项目,它将创建您需要的所有文件,包括“stdafx.h”头文件。 –

+1

只需删除'#include“stdafx.h”'指令。你不需要它;它纯粹是一种优化。 –

+1

^或者''#include '语句周围使用'#ifdef WINVER',以保持代码的可移植性。 –

回答

1

您可能使用了需要stdafx.h的项目模板。

要解决它,您可以删除您的cpp文件中的#include "stdafx.h"

或者,在使用VS模板创建新项目时关闭Precompiled header选项。例如,Win32 Console Application模板:

enter image description here

enter image description here

+1

恐怕没有问题,但OP很不清楚。 –

+0

项目模板和预编译头文件之间没有关系(除了可以启用/禁用**任何**项目类型的预编译头文件的使用外)。在这方面Win32控制台项目没有什么特别之处。 – IInspectable

+0

仍然是假的。没有模板*“需要”*使用预编译头文件。所有模板**都可以使用预编译头文件。使用标准的* Win32控制台应用程序*模板(Visual Studio 2015),预编译的头文件**被默认用于控制台应用程序。听起来你听起来很不舒服。 – IInspectable

1

stdafx.h中是用于precompiled header files的默认文件名。这是Visual Studio特定的优化,它将很少变化的头文件编译成二进制表示,以加快编译速度。

一个预编译头文件的怪癖是,你必须在每个编译单元的第一个非注释/非空白行上包含用于create the precompiled header file的头文件。由于这可能变得不切实际(例如,以源代码形式使用第三方库),编译器允许您为您包含头文件。 /FI (Name Forced Include File)编译器开关就是这样做的。

从本质上讲,解决问题的方法是:

  1. 到处卸下#include <stdafx.h>指令。
  2. [可选]在Visual Studio项目中启用预编译头文件的创建。
  3. 使用Visual Studio中的/FI编译器开关,如果你选择在步骤创建预编译的头文件使用`“stdafx.h中” 2.