2009-10-20 55 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 $設置。