你是一個有點困惑Studio如何目視着C++文件工作,但沒關係,因爲該文件是糟糕的。第一件事情:與C#或Java不同,項目中文件的排列與磁盤上文件的排列無關。文件和文件夾不是「在」項目中,真的;該項目只列出了文件和文件夾的名稱和路徑,這些文件和文件夾必須已經存在於您的磁盤上。
讓我們用一個具體的例子來工作,我會告訴你如何組織它。假設您正在製作一個名爲SuperCalc的圖形計算器程序。您將擁有一個Source文件夾,然後在Source內部創建文件夾以容納不同的文件。假設你創建文件夾爲:
SuperCalc\Source\Input
SuperCalc\Source\Math
SuperCalc\Source\Math\Matrix
SuperCalc\Source\Output
你的Source
3個子目錄:Input
,Output
和Math
。 Math
子目錄有一個名爲Matrix
的子目錄。輸入,數學,矩陣和輸出中將包含.cpp文件。您將使用Windows資源管理器或命令提示符創建這些目錄(文件夾)。
現在您還需要創建一個解決方案文件(SuperCalc.sln
)和一個項目文件(SuperCalc.vcxproj
)。在Visual Studio中執行此操作。通常,項目文件位於解決方案目錄的子文件夾中;這將由Visual Studio自動完成。爲 解決方案文件選擇一個位置 - 它應該位於與源代碼相同的目錄結構(文件夾樹)中。我建議把它旁邊的源目錄中:
走進VS並挑選File > New > Project > Visual Studio Solutions > Blank Solution File
。給解決方案一個名稱(也許是「SuperCalc」)和一個位置(我們剛纔在SuperCalc\Build
目錄中選擇的位置)。它將爲您創建解決方案文件。
現在右鍵單擊Solution Explorer中的解決方案(「Solution SuperCalc,0個項目」),然後選取Add > New Project
。選擇一個名稱 - 這將是您的程序可執行文件的名稱,如「SuperCalc」!選擇Win32,或者Win32控制檯應用程序(這是一個DOS控制檯程序)或Win32項目(這是一個普通的Windows GUI程序)。通常我會點擊應用程序設置進行一些重要的更改:首先,我選擇Empty Project,因爲我不想讓Visual Studio爲我創建文件和代碼,除非我告訴它。當它按照我想要的方式設置時,我點擊FINISH。
現在,您已經獲得了由Visual Studio創建的解決方案文件和項目。您還擁有您的源代碼,或者至少是您的源代碼所在的目錄結構(文件夾樹),在Visual Studio之外創建。現在是把這兩件事聯繫在一起的時候了。
如果需要,可以將所有源文件列入項目的源文件過濾器。即使它們來自不同的目錄(輸入,矩陣等),磁盤上文件的位置與它們在項目中的外觀之間也沒有必要的關係。但是,如果您有很多文件,那麼創建「子過濾器」,在「源文件」過濾器內部進行過濾,併爲它們提供源的子文件夾的名稱會更容易。這樣,您就可以在項目文件中複製磁盤目錄的結構。
右鍵單擊「SuperCalc」項目的源文件篩選器,然後選擇添加>添加新篩選器。給它起一個名字Input
(SuperCalc \ Source目錄中的第一個)。還要創建過濾器Math
和Output
。右鍵單擊Math
過濾器並選擇添加>添加新過濾器,以創建一個名爲Matrix
(Math內部)的子過濾器。現在你有這些過濾器:
SuperCalc
Source Files
Input
Math
Matrix
Output
它平行的目錄(文件夾)之前創建。 這純粹是人類便利的安排。 Visual Studio不瞭解任何特殊的內容。如果你只是告訴VS「添加文件」,它不會把文件放在正確的過濾器中。你必須告訴它它放在哪裏。
要添加或創建.cpp文件,請選擇與.cpp文件所在目錄對應的篩選器名稱。因此,要添加或創建文件SuperCalc\Source\Math\Matrix\matrix_multiply.cpp
,請在解決方案資源管理器中右鍵單擊Matrix
篩選器,然後選擇添加>添加新文件或添加現有文件。 (添加現有文件適用於已經寫入matrix_multiply.cpp並且您只是想告訴項目它在哪裏。)使用對話框導航到Source\Math\Matrix
目錄。對整個程序中的所有源文件重複此過程。
您還有一個問題:「是否有類似於$(CURDIR)的東西可用於包含源文件文件夾而不需要絕對路徑?」你很幸運:Visual Studio項目不使用絕對路徑!他們使用相對路徑。項目文件存儲從包含.vcxproj文件的目錄到包含源文件的目錄所需的相對路徑。因此,如果您創建了SuperCalc.sln
和SuperCalc.vcxproj
(我建議)(SuperCalc\Build
目錄),並且將源文件添加到源子目錄中,則可以查看SuperCalc。使用vcxproj文件記事本,你會看到線,如:
<ClCompile Include="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />
由於沒有絕對路徑,你可以把整個SuperCalc目錄樹和別的地方移動它,它都會仍然可以工作。不需要像$(CURDIR)這樣的環境變量。
要知道的最後一件事:因爲您將源文件放在多個目錄中,所以可能會遇到與.h或.hpp文件相關的#include
問題。您必須告訴編譯器頭文件所在的目錄。它們可能分散在多個目錄中。因此,編輯項目設置:右鍵單擊解決方案資源管理器中的項目名稱,選擇屬性,然後深入到配置屬性> C/C++>常規。屬性表中的第一個字段顯示「其他包含目錄」。 在你做任何事情之前,點擊配置下拉菜單並選擇所有配置。如果您同時擁有32位和64位版本,請點擊平臺下拉菜單並選擇所有平臺。現在轉到「其他包含目錄」並將所有路徑添加到所有源目錄中,並指定相對於項目文件目錄的路徑。所以對於SuperCalc例如,它看起來像:
..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output
一旦做出改變,就像來源\數學\矩陣\ matrix_multiply.cpp一個文件可以有一個 線
#include "input_configuration.hpp"
到#包括來自Input目錄的一個文件,它將全部工作。
(如果不是所有剛工作時,通常的做法是重新回到項目屬性和小提琴與..\
序列的數目在附加包含目錄的前面。記住,每次你去作你必須選擇改變所有配置再次 - 。否則你的改變將只適用於當前配置(調試或釋放)該設置不粘膩)
此外,您還可以定義用戶宏如。 $(源)通過屬性表(.props)。我建議儘可能多地在屬性表中設置項目設置,因爲許多項目可能會共享設置。 – 2012-06-11 20:16:12
很好的答案。我創建了與我的目錄結構相匹配的過濾器,但我遇到了一個經常性的頭痛問題,您稍微觸及了一下。 VS不知道我的過濾器是鏈接到目錄。當我按順序添加代碼時,這會變得很痛苦:foo.h,foo.c,bar.h,bar.c.我必須記住不斷更改目錄到正確的位置。 VC++會記住你的最後一個目錄,所以它總是落後一步。 我向MS發佈了一個建議,允許將目錄與過濾器相關聯。是這裏。如果這也讓你感到厭倦,請提高這個建議。 http://tinyurl.com/bud4zsv – 2013-03-07 22:59:04
甜!在2015年的社區中,一個空的解決方案是在新的>項目...>其他項目類型> Visual Studio解決方案>空白解決方案 – 2015-07-28 16:16:34