2009-10-20 78 views
4

我已经通过每个选项尝试找到一种方法让IDE让我创建一个没有预编译头文件的新win32pject。我已阅读每个线程在这个论坛上,在它的词“precpmpiled头”和我最接近的是:VS2008 win32项目默认值 - 删除默认的预编译头文件

Precompiled Headers

使用2008 PRO(不表达,althought的行为似乎是相似的)我去于:

文件 - >新建 - >项目

这将打开我选择Visual C++ Win32项目新建项目对话框,输入一个名称,点击OK。

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

当我点击完成我在xxx.cpp中获得6码代码,四个头文件和强制性stdafx.cpp。

也许我可以删除和删除所有这些东西,并进入属性并关闭PCH,但这是我想写的很多小项目示例的精髓。

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

+2

时间来为他们在connect.microsoft.com提交一些反馈:) 我同意,他们的项目默认值是可怕的。它们似乎是专门设计用来以各种方式阻止我们。 – jalf 2009-10-20 10:55:23

回答

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 

an: ð找到[!else]的第一次出现,并删除这些三线下方:

stdafx.h 
targetver.h 
stdafx.cpp 

这会给你没有stdafx.cpp/.H或targetver.h项目,以及CPP文件将不会尝试使用PCH。但是它不会生成,因为我们没有在相应的头文件中添加任何#includes。我会离开,你要弄清楚:)
(您可以编辑得到\templates\1033通过修改文件自动生成的文件)

+0

谢谢您提供非常全面的答案。是的,它的工作。 (复选框的行为仍然相同,但结果如您所愿) – 2009-10-21 00:08:21

1

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

+0

正如问题中所述,即使选中了“空项目”,只要选择了WIN32 PROJECT,预编译的标题复选框就会自动检查 – 2009-10-21 00:09:44

2

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

-1

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

我不知道即使在最小的测试项目中,微软仍然强迫执行预编译头文件。据推测,它基于相同的哲学原理,它给了我们宏大的地狱,即windows.h,或者即使是一个空的项目也会覆盖二十多个项目设置,使得属性表几乎无用。

我怀疑微软开发部门内部只是一个强大的黑手党,他正在尽其所能去阻止阻止 Visual Studio不会成为C++开发人员的有用工具。到目前为止,他们做得很好。

+0

TH只适用于CONSOLE项目。 Win32项目具有问题中描述的行为。你知道VS2008 IDE的一个合适的替代方案吗? – 2009-10-21 00:10:54

1

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

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

1

因为我在VS2010中遇到同样的问题,所以我在这方面很晚了。

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

因为有工具下没有设置或选项这将使我默认为空项目,我找遍了一圈,发现了以下内容:

文件夹

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

有一个文件命名为默认。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> 

替换(换言之,我刚切换上那些行) ,现在我创建一个控制台应用程序时,默认情况下有一个空的项目。

我不知道当我除了控制台应用程序之外还会有什么影响,但由于我保存了原始文件,我可以恢复到旧的M $设置。