4

我已经通过所有选项来尝试找到一种方法来让 IDE 让我创建一个没有预编译头文件的新 win32pject。我已经阅读了这个论坛上的每一个帖子,里面都写着“precpmpiled headers”,我得到的最接近的是:

预编译头文件

使用 2008 pro(不是表达,虽然行为似乎相似)我去:

文件 -> 新建 -> 项目

这将打开 New Project 对话框,在其中我选择 Visual C++ Win32 Project,输入名称并点击 OK。

然后我得到“Win32 应用程序向导”。将应用程序类型设置为“Windows 应用程序”,应用程序设置窗格将不允许我取消选中预编译的标头。该复选框是灰色的。如果我选择“控制台应用程序”,我可以取消选中它,但我正在创建一个 GUI 应用程序。

当我单击完成时,我在 xxx.cpp 中得到 6 码代码、四个头文件和强制性的 stdafx.cpp。

也许我可以删除和删除所有这些东西,然后进入属性并关闭 PCH,但这对于我想编写的许多小项目示例来说是个麻烦事。

我只想要一个将编译为 win32 应用程序的空项目,那么如何将 PCH 默认值更改为 NONE?

4

6 回答 6

8

您可以制作自己的模板来执行此操作,也可以编辑默认模板。相关向导可以在这里找到:

C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\AppWiz\Generic\Application

显然,如果您要编辑默认模板,请先备份文件夹。

我将向您展示如何开始编辑它。

首先,您需要告诉向导脚本您不需要预编译的标头。在您喜欢的文本编辑器中编辑此文件:

\scripts\1033\default.js

找到这一行:

var Pch = wizard.FindSymbol("PRE_COMPILED_HEADER");

并像这样注释掉它下面的一些行:

//  if ((strAppType == "LIB" || ((strAppType == "CONSOLE") && 
//      !wizard.FindSymbol("SUPPORT_MFC") && !wizard.FindSymbol("SUPPORT_ATL"))) && !Pch) 
    {
        AddFilesToProjectWithInfFile(selProj, strProjectName);
        SetNoPchSettings(selProj);
    }
//  else
//  {
//      AddFilesToProjectWithInfFile(selProj, strProjectName);
//      SetCommonPchSettings(selProj);  
//  }

现在打开这个文件:

\templates\1033\Templates.inf

并找到第一次出现[!else]并删除它下面的这 3 行:

stdafx.h
targetver.h
stdafx.cpp

这将为您提供一个没有 stdafx.cpp/.h 或 targetver.h 的项目,并且 CPP 文件不会尝试使用 PCH。但是它不会构建,因为我们没有将任何#includes 添加到适当的头文件中。我会把它留给你弄清楚:
)(你可以通过修改中的文件来编辑自动生成的文件\templates\1033

于 2009-10-20T10:04:07.960 回答
2

要么选择一个空项目,要么创建自己的向导,在其中使用模板。既然您说您不想一直更改属性,我也强烈建议使用属性表(vsprops)。这样,您创建一个空项目,添加所需的属性表,然后就可以开始了。不再摆弄属性,每个项目都使用相同的集合。

于 2009-10-20T09:25:39.160 回答
1

在“应用程序设置”对话框的“附加选项”中标记“空项目”复选框。

于 2009-10-20T09:15:57.453 回答
1

“空项目”选项将创建一个没有预编译头文件的项目。至少,这是我在 Visual Studio 2008 SP1 上得到的。

确实,“使用预编译的头文件”仍然处于选中状态,但项目将具有属性 UsePrecompiledHeader="0" 并且向导不会创建文件。

于 2009-11-13T13:58:08.690 回答
1

我在这股潮流中跳得太晚了,因为我在 VS2010 上遇到了同样的问题。

我不确定这个解决方案是否适用于 VS2008。

由于工具下没有可以让我默认为空项目的设置或选项,我四处搜索并发现以下内容:

在文件夹中

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\VCWizards\AppWiz\Generic\Application\html\1033

有一个名为 default.htm 的文件

在该</HEAD>部分中,有两行:

<SYMBOL NAME="EMPTY_PROJECT" TYPE=checkbox VALUE=false></SYMBOL>
<SYMBOL NAME="PRE_COMPILED_HEADER" TYPE=checkbox VALUE=true></SYMBOL>

我替换为

<SYMBOL NAME="EMPTY_PROJECT" TYPE=checkbox VALUE=true></SYMBOL>
<SYMBOL NAME="PRE_COMPILED_HEADER" TYPE=checkbox VALUE=false></SYMBOL>

(换句话说,我只是在这些行上切换了truefalse),现在我在创建控制台应用程序时默认有一个空项目。

我不知道当我执行控制台应用程序以外的操作时会产生什么影响,但由于我保存了原始文件,我可以恢复到旧的 M$ 设置。

于 2011-02-20T03:27:07.853 回答
-1

您可以在“其他选项”下选择“空项目”。然后你会得到一个没有预编译头文件的项目,也没有自动生成的文件。

即使在最小的测试项目中,我也不知道微软对强制预编译头文件的痴迷是什么。大概它基于相同的哲学,给我们带来了 windows.h 的宏地狱,或者即使是一个空项目也会覆盖两打项目设置,使属性表几乎无用。

我怀疑微软的开发部门内部有一个强大的黑手党,他们竭尽全力阻止Visual Studio 成为 C++ 开发人员的有用工具。到目前为止,他们在这方面做得很好。

于 2009-10-20T10:58:36.410 回答