vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识
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>
vs(visual stuiod)中vc++工程的Filter和Folder及vcxproj知识的更多相关文章
- 清理Visual Studio中VC++工程里不需要的文件
Visual Studio开发C++,工程的空间几M,几十M甚至几百M的长,生成的中间文件看的眼花缭乱,占空间不说,特别是备份拷贝代码时无奈的等待,有了这个脚本,好吧,整个世界清静了. @echo o ...
- Visual Studio中C++工程的环境配置方法
在Visual Studio的C++工程设置 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录. 2.添加文件引用的lib静态库路径:工程---属性- ...
- VS中创建自定义一个VC工程为基础的开发向导的总结
作者:朱金灿 来源:http://blog.csdn.net/clever101 VS允许用户进行自定义开发向导.自定义开发向导的好处在于将常用的设置都通过向导生成,从而大大提供开发效率.特别是在开发 ...
- VC工程中文件的编译顺序
用联合编译工具能减少大量编译时间,然而如果工程里有个大型cpp文件,其他文件都编译好了只等着它... 两步解决问题: 1.将大文件分散到多个小cpp里面,加快并发,减少单个文件编译时间 2.优先编译大 ...
- 如何把visual studio 2010的工程文件迁入TFS2010中管理
如何在VS2010里面创建项目并添加到TFS2010里面. 新建一个项目,并把它添加到TFS,我们会收到下面的错误: 这是因为我们没有为项目创建Team project,而把它直接添加到了Team p ...
- VS IDE 中Visual C++ 中的项目属性配置
VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...
- VC工程里,如何编译汇编语言的文件
最近老是有朋友问,VC工程里,如何编译汇编语言的文件,接下来就说一下步骤: 1.将汇编语言文件,加入到工程里: 2.在Solution Explorer窗口中右键单击Visual C++项目,选择Bu ...
- Visual C++中各种文件的作用(详细)
参考:http://blog.sina.com.cn/s/blog_6975d67c0100r3kx.html DSW:全称是Developer Studio Workspace,最高级别的配置文件, ...
- Visual C++ 中的重大更改
https://technet.microsoft.com/zh-cn/learning/bb531344.aspx 当你升级到 Visual C++ 编译器的新版本后,可能会在之前编译并正常运行 ...
- visual 2008中error PRJ0003 : 生成 cmd.exe 时出错
visual 2008中error PRJ0003 : 生成 cmd.exe 时出错”, 和vs2008 sp1没关系 解决方案:工具—>选项—>项目和解决方案—>VC++目录, ...
随机推荐
- 深度学习-08(PaddlePaddle文本分类)
深度学习-08(PaddlePaddle文本分类) 文章目录 深度学习-08(PaddlePaddle文本分类) NLP概述 NLP基本概念 什么是NLP NLP的主要任务 传统NLP方法 传统NLP ...
- 飞行时间技术TOF
文章目录 飞行时间技术TOF 一. 光速的测定 二. 各种TOF技术 直接脉冲TOF 脉冲间接TOF 连续波调制TOF(Continous Wave TOF) 三. TOF技术的应用 飞行时间技术TO ...
- Python 列表的修改、添加和删除元素
列表修改.添加和删除元素 大多数创建的列表都是动态的,随程序的运行增删元素 修改列表元素 指定列表名和要修改的元素的索引,再指定要修改元素的新值 # 修改列表元素案例 motorcycles = [' ...
- 音视频八股文(6)-- ffmpeg大体介绍和内存模型
播放器框架 常用音视频术语 • 容器/文件(Conainer/File):即特定格式的多媒体文件, 比如mp4.flv.mkv等. • 媒体流(Stream):表示时间轴上的一段连续数据,如一 段声音 ...
- 2022-10-31:以下go语言代码输出什么?A:map[];B:nil;C:Panic;D:编译错误。 package main import “fmt“ func main() {
2022-10-31:以下go语言代码输出什么?A:map[]:B:nil:C:Panic:D:编译错误. package main import "fmt" func main( ...
- 2020-10-03:java中satb和tlab有什么区别?
福哥答案2020-10-03:#福大大架构师每日一题# 简单回答:satb: snapshot-at-the-beginning,快照.tlab:thread local allocation buf ...
- 初等数论——素数,逆元,EXGCD有关
初等数论 素数定义 设整数 \(p\ne 0,\pm 1\) .如果 \(p\) 除了平凡约数以外没有其他约数,那么称 \(p\) 为素数(不可约数). 若整数 \(a\ne 0,\pm 1\) 且 ...
- win10双系统Ubuntu的安装之旅(安装+美化+问题解决方案)
一.前言 最近想用一下Ubuntu,于是乎开始了win10安装Ubuntu的旅程,安装的过程中是看到了很多前人已经写好的非常详细的教程,那这里我就不再重复造轮子啦,直接放上链接咯- 看看我的成果图- ...
- K8S in Action 读后感(概念简介)
一.K8S的用武之地 今天,大型单体应用正被逐渐拆分成小的.可独立运行的组件,我们称之为微服务.微服务彼此之间解耦,所以它们可以被独立开发.部署.升级.伸缩.这使得我们可以对每一个微服务实现快速迭代, ...
- 【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...