## vs中創建Filter 在一個新項目中右鍵 - Add - New,預設只有一選項 New Filter。 創建出來的Filter可以理解為是VS的過濾器(虛擬目錄),它不會在本地的磁碟上新建目錄,而是修改了.filters文件,把這種目錄關係記錄在.filters文件中。 ![image-2 ...
vs中創建Filter
在一個新項目中右鍵 - Add - New,預設只有一選項 New Filter。
創建出來的Filter可以理解為是VS的過濾器(虛擬目錄),它不會在本地的磁碟上新建目錄,而是修改了.filters文件,把這種目錄關係記錄在.filters文件中。
新建一個vc++ project,預設有這幾種Filter,當然在實際的項目中我們會新建很多Filter用來目錄分類,也可以對預設的Filter進行改名。
vs中創建文件夾
點擊菜單欄 - Project - Show All File,然後再切到解決方案瀏覽器,右鍵 - New,就會出現New Folder,不過隨之New Filter選項也消失了。
劃重點:此種方式創建的文件夾是和project,也就是vcxproj同級的。如果移動了目錄,比如源碼不是vcxproj的子目錄下就需要註意。
添加已有的文件夾/目錄
通過Add - Existing Item只能添加具體的文件,也就是添加完之後在vs的中只會顯示添加的cpp文件而無法顯示文件夾,但是vcxproj文件中卻記錄了文件的路徑。
<ClCompile Include="..\..\msvcpp\collection\listTest.cpp" />
ChatGPT給出的答案是針對vs的,而並非vc++工程。
博客園找到一個答案,實踐是可行:
-
將文件夾拷貝到【vcxproj文件同目錄】
-
解決方案右上有個【顯示所有文件】的按鈕
-
在需要添加的目錄上右擊 - 選擇 [Include In Project]即可
不過這種方式添加的目錄,在取消【顯示所有的文件之後】還是統一的顯示在了Source Files或Header Files下。
但是由於我把sln移動了目錄,也就是sln和源文件並不在同一級目錄下,所以顯示所有文件,只會顯示vcxproj所在目錄下的所有文件,無法顯示其它文件夾下的文件。
vc++工程中文件夾(Folder)和Filter
通過上面的實踐知識可以知道,對於vc++工程,創建目錄和Filter需要同步,即創建一個Folder,然後再創建一個同名的Filter。
同樣是在vs中的c#工程則沒有Filter只有Folder。
大型項目是如何組織的?
對於一些大型的c++工程,很可能出現N多源碼都在一個目錄下,但是在vs中創建了多個Filter。
也不一定使用vs自帶的幾種Filter,比如會把.h和cpp文件放在同一個Filter下,即Filter當作虛擬文件夾來使用
讀懂vs工程文件vcxproj和filter
在每一個vc++ project的目錄下,都有這樣2個文件
- project_name.vxcproj
- project_name.vxcproj.filters
這兩個文件的格式都類似於xml
相同點:cpp文件放在ClCompile節點中,而hpp/h文件則放在ClInclude節點中
filter文件
filter文件內容如下,主要是記錄工程的filter組織關係。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="..\..\msvcpp\ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\msvcpp\stdafx.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\msvcpp\stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\msvcpp\collection\listTest.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
vcxproj文件
除了ClInclude和ClCompile,vcxproj則還包含了一些編譯選項及平臺的配置,可以這樣說在vs - 項目 - 右鍵 - 屬性頁全部設置,全部都在此文件中。
下麵摘錄此文件中的一些片段:
應用類型,及toolset
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
編譯選項,巨集定義等等
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
所包含的文件,只不過這裡並無Filter信息,而是文件在磁碟上的相對路徑,如下:
<ItemGroup>
<Text Include="..\..\msvcpp\ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\msvcpp\stdafx.h" />
<ClInclude Include="..\..\msvcpp\targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\msvcpp\collection\listTest.cpp" />
<ClCompile Include="..\..\msvcpp\msvcpp.cpp" />
<ClCompile Include="..\..\msvcpp\stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\msvcpp\strTest.cpp" />
</ItemGroup>
.vcxproj.user
在 Visual Studio 中,.user 文件是用來存儲用戶自定義設置的文件。這些設置包括項目文件中未包含的 IDE 設置,例如編輯器字體和顏色、自定義工具欄和視窗佈局等等。用戶可以通過修改 .user 文件來自定義這些設置,而不會影響項目文件或者其他用戶的設置。每個用戶都可以擁有自己的 .user 文件。
比如上文的顯示Filter還是全部的設置就包含在此文件中
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup>
</Project>