vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/17592383.html



vs中创建Filter#

在一个新项目中右键 - Add - New,默认只有一选项 New Filter。

创建出来的Filter可以理解为是VS的过滤器(虚拟目录),它不会在本地的磁盘上新建目录,而是修改了.filters文件,把这种目录关系记录在.filters文件中。

image-20230728130339584

新建一个vc++ project,默认有这几种Filter,当然在实际的项目中我们会新建很多Filter用来目录分类,也可以对默认的Filter进行改名。

image-20230729161227399


vs中创建文件夹#

点击菜单栏 - Project - Show All File,然后再切到解决方案浏览器,右键 - New,就会出现New Folder,不过随之New Filter选项也消失了。

image-20230729153054729

划重点:此种方式创建的文件夹是和project,也就是vcxproj同级的。如果移动了目录,比如源码不是vcxproj的子目录下就需要注意。


添加已有的文件夹/目录#

通过Add - Existing Item只能添加具体的文件,也就是添加完之后在vs的中只会显示添加的cpp文件而无法显示文件夹,但是vcxproj文件中却记录了文件的路径。

Copy
<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组织关系。

Copy
<?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 - 项目 - 右键 - 属性页全部设置,全部都在此文件中。

image-20230729170407922

下面摘录此文件中的一些片段:

应用类型,及toolset

Copy
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v143</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup>

编译选项,宏定义等等

Copy
<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信息,而是文件在磁盘上的相对路径,如下:

Copy
<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还是全部的设置就包含在此文件中

Copy
<?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>

作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(944)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2014-07-30 NGUI Clip Animation (UI动画)
CONTENTS
点击右上角即可分享
微信分享提示