我已经通过各种方法试图找到一种方法让IDE让我创建一个没有预编译头文件的新win32pject。我已经阅读了这个论坛上的每个主题,其中包含“precpmpiled headers”字样,我得到的最接近的是:
使用2008专业人士(不表达,虽然行为似乎相似)我转到:
档案 - >新 - >项目
这将打开New Project对话框,我在其中选择Visual C ++ Win32 Project,输入名称并点击OK。
然后我得到了“Win32应用程序向导”。将“应用程序类型”设置为“Windows应用程序”后,应用程序设置窗格将不允许我取消选中预编译的标头。复选框显示为灰色。如果我选择“控制台应用程序”,我可以取消选中它,但我正在创建一个GUI应用程序。
当我单击Finish时,我在xxx.cpp中获得了6码的代码,四个头文件和强制性的stdafx.cpp。
也许我可以移除并删除所有这些内容并进入属性并关闭PCH,但这对于我想写的许多小项目示例来说都是一个小问题。
我只想要一个将编译为win32应用程序的空项目,那么如何将PCH默认值更改为NONE?
答案 0 :(得分: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
)
答案 1 :(得分:2)
选择一个空项目,或者创建一个使用模板的向导。既然你说你不想一直改变属性,我也强烈建议使用属性表(vsprops)。这样,您可以创建一个空项目,添加所需的属性表,然后就可以开始了。不再烦恼属性,每个项目使用相同的集合。
答案 2 :(得分:1)
在“应用程序设置”对话框的“其他选项”中选中“清空项目”复选框。
答案 3 :(得分:1)
“空项目”选项将创建一个没有预编译标题的项目。至少,这是我在Visual Studio 2008 SP1上获得的。
“使用预编译头”确实仍然处于选中状态,但项目将具有属性UsePrecompiledHeader =“0”,向导将不会创建文件。
答案 4 :(得分: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>
(换句话说,我刚刚在这些行上切换 true 和 false ) 现在我在创建控制台应用程序时默认有一个空项目。
我不知道当我执行控制台应用程序之外的其他操作时会产生什么影响,但由于我保存了原始文件,因此我可以恢复到旧的M $设置。
答案 5 :(得分:-1)
您可以在“其他选项”下选择“空项目”。然后你得到一个没有预编译头文件的项目,也没有自动生成的文件。
我不知道微软是否对即使在最小的测试项目中强制预编译的头文件的痴迷也是如此。据推测,它基于相同的philosphy,给了我们宏观地狱的windows.h,或者甚至一个空项目的方式覆盖了二十多个项目设置,使得属性表几乎无用。
我怀疑微软开发人员部门内部只有一个强大的黑手党,他们正竭尽所能阻止 Visual Studio成为C ++开发人员的有用工具。到目前为止,他们做得很好。