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

打印 上一主题 下一主题

主题 923|帖子 923|积分 2769

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文件中却记录了文件的路径。
  1. [/code]ChatGPT给出的答案是针对vs的,而并非vc++工程。
  2. 博客园找到一个答案,实践是可行:
  3. [list]
  4. [*]将文件夹拷贝到【vcxproj文件同目录】
  5. [*]解决方案右上有个【显示所有文件】的按钮
  6. [*]在需要添加的目录上右击 - 选择 [Include In Project]即可
  7. [/list]不过这种方式添加的目录,在取消【显示所有的文件之后】还是统一的显示在了Source Files或Header Files下。
  8. 但是由于我把sln移动了目录,也就是sln和源文件并不在同一级目录下,所以显示所有文件,只会显示vcxproj所在目录下的所有文件,无法显示其它文件夹下的文件。
  9. [size=5]vc++工程中文件夹(Folder)和Filter[/size]
  10. 通过上面的实践知识可以知道,对于vc++工程,创建目录和Filter需要同步,即创建一个Folder,然后再创建一个同名的Filter。
  11. 同样是在vs中的c#工程则没有Filter只有Folder。
  12. [size=5]大型项目是如何组织的?[/size]
  13. 对于一些大型的c++工程,很可能出现N多源码都在一个目录下,但是在vs中创建了多个Filter。
  14. 也不一定使用vs自带的几种Filter,比如会把.h和cpp文件放在同一个Filter下,即Filter当作虚拟文件夹来使用
  15. [size=5]读懂vs工程文件vcxproj和filter[/size]
  16. 在每一个vc++ project的目录下,都有这样2个文件
  17. [list]
  18. [*]project_name.vxcproj
  19. [*]project_name.vxcproj.filters
  20. [/list]这两个文件的格式都类似于xml
  21. 相同点:cpp文件放在ClCompile节点中,而hpp/h文件则放在ClInclude节点中
  22. [size=5]filter文件[/size]
  23. filter文件内容如下,主要是记录工程的filter组织关系。
  24. [code]<?xml version="1.0" encoding="utf-8"?>
  25. <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  26.   <ItemGroup>
  27.     <Filter Include="Source Files">
  28.       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
  29.       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
  30.     </Filter>
  31.     <Filter Include="Header Files">
  32.       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
  33.       <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
  34.     </Filter>
  35.     <Filter Include="Resource Files">
  36.       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
  37.       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
  38.     </Filter>
  39.   </ItemGroup>
  40.   <ItemGroup>
  41.     <Text Include="..\..\msvcpp\ReadMe.txt" />
  42.   </ItemGroup>
  43.   <ItemGroup>
  44.     <ClInclude Include="..\..\msvcpp\stdafx.h">
  45.       <Filter>Header Files</Filter>
  46.     </ClInclude>
  47.   </ItemGroup>
  48.   <ItemGroup>
  49.     <ClCompile Include="..\..\msvcpp\stdafx.cpp">
  50.       <Filter>Source Files</Filter>
  51.     </ClCompile>
  52.     <ClCompile Include="..\..\msvcpp\collection\listTest.cpp">
  53.       <Filter>Source Files</Filter>
  54.     </ClCompile>
  55.   </ItemGroup>
  56. </Project>
复制代码
vcxproj文件

除了ClInclude和ClCompile,vcxproj则还包含了一些编译选项及平台的配置,可以这样说在vs - 项目 - 右键 - 属性页全部设置,全部都在此文件中。

下面摘录此文件中的一些片段:
应用类型,及toolset
  1.   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
  2.     <ConfigurationType>Application</ConfigurationType>
  3.     <UseDebugLibraries>true</UseDebugLibraries>
  4.     <PlatformToolset>v143</PlatformToolset>
  5.     <CharacterSet>Unicode</CharacterSet>
  6.   </PropertyGroup>
复制代码
编译选项,宏定义等等
  1.   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
  2.     <ClCompile>
  3.       <PrecompiledHeader>Use</PrecompiledHeader>
  4.       <WarningLevel>Level3</WarningLevel>
  5.       <Optimization>Disabled</Optimization>
  6.       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
  7.       <SDLCheck>true</SDLCheck>
  8.     </ClCompile>
  9.     <Link>
  10.       <SubSystem>Console</SubSystem>
  11.       <GenerateDebugInformation>true</GenerateDebugInformation>
  12.     </Link>
  13.   </ItemDefinitionGroup>
复制代码
所包含的文件,只不过这里并无Filter信息,而是文件在磁盘上的相对路径,如下:
  1. <ItemGroup>
  2.     <Text Include="..\..\msvcpp\ReadMe.txt" />
  3.   </ItemGroup>
  4.   <ItemGroup>
  5.     <ClInclude Include="..\..\msvcpp\stdafx.h" />
  6.     <ClInclude Include="..\..\msvcpp\targetver.h" />
  7.   </ItemGroup>
  8.   <ItemGroup>
  9.     <ClCompile Include="..\..\msvcpp\collection\listTest.cpp" />
  10.     <ClCompile Include="..\..\msvcpp\msvcpp.cpp" />
  11.     <ClCompile Include="..\..\msvcpp\stdafx.cpp">
  12.       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
  13.       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
  14.     </ClCompile>
  15.     <ClCompile Include="..\..\msvcpp\strTest.cpp" />
  16.   </ItemGroup>
复制代码
.vcxproj.user

在 Visual Studio 中,.user 文件是用来存储用户自定义设置的文件。这些设置包括项目文件中未包含的 IDE 设置,例如编辑器字体和颜色、自定义工具栏和窗口布局等等。用户可以通过修改 .user 文件来自定义这些设置,而不会影响项目文件或者其他用户的设置。每个用户都可以拥有自己的 .user 文件。
比如上文的显示Filter还是全部的设置就包含在此文件中
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3.   <PropertyGroup>
  4.     <ShowAllFiles>false</ShowAllFiles>
  5.   </PropertyGroup>
  6. </Project>
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表