知识往往是牵一发动全身,知识面不全会导致理解错误或者片面,会引发错误。多学习,多积累,每天进步一点点。
vs 基础配置文件解析
.vcproj是工程文件,sln是解决方案文件。一个解决方案里面可以包含多个工程。
你打开vcproj文件编译不了可能是因为这个工程里面用到了同一个解决方案中其它工程的东西。
visual Studio.NET采用两种文件类型(.sln和.suo)来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息从而在每次继续开发任务时,不会因开发环境而分散精力;
-
.sln:(Visual Studio.Solution) 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等 。
-
.suo: (solution user opertion) 解决方案用户选项记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含您所做的自定义设置。.suo是solution user option的缩写,它是很重要的文件,它储存了用户界面的自定义配置,包括布局、断点和项目最后编译的而又没有关掉的文件(下次打开时用)等,以便于下一次你打开Visual Studio可以恢复这些设置,因此不要随便删除也无法删除,况且它们就是隐藏文件,所以不要管它们。 其实上面英文中解释已经很清楚了,要申明的是PDB中不带断点信息。
vcproj简介
vcproj的具体格式为xml格式,其中包含三个主要的节:platform,configuration,Files
- platform:描述的只是x64,x86等不同的平台。
- configuration:描述的是编译和链接器的环境配置信息。可以通过vs08或者vs05的项目属性进行设置,也可以手动的进行设置。
- Files:描述的是编译时需要的各种cpp,h文件,其中也会分节点,Filter描述的是目录,Files描述的是具体的文件。
用户自定义开发环境宏
例如$(IntDir)和$(OutDir)
例如$(TargetFileName)等这样的VS宏。
它们不是全局宏,不能在一般CMD窗口中通过set命令查看, 但是可以通过VS的命令窗口打开。
查看全部宏的方法
网上我搜到的有两种方法。
第一种方法:
假装要更改属性中的某个路径或添加路径等,然后点编辑浏览全部宏。
全图形化的方法来查看VS定义的宏:
- 在VS集成开发环境中,打开项目属性窗口;
- 找到一个可编辑的条目,譬如C/C++、常规(General)、附加包含目录(Additional Include directories);
- 光标定位进框框,点击右端向下的箭头、点编辑;
- 右下方有宏(maros)按钮,点击之;
- 所有宏呈现在眼前。
vs的环境变量(通过vs自带命令行工具查看)与vs宏不完全一致,两者不是一个概念。
第二种方法(没有成功,可能是vs版本不同吧):
视图->属性管理器->用户宏
下面的列表是对用户宏的解释
-宏- | -解释- |
---|---|
ConfigurationName | 配置名字,通常是Debug或者Release |
IntDir | 编译器使用的中间目录,产出obj文件 |
OutDir | 链接器使用的输出目录 |
ProjectDir | 项目目录 |
ProjectName | 项目名字 |
SolutionDir | 解决方案目录 |
TargetDir | 目标输出文件所在的目录 |
TargetExt | 目标输出的扩展名 |
TargetFileName | 目标输出文件名,包括扩展名 |
TargetName | 目标输出名,不包括扩展名 |
TargetPath | 目标输出文件的全路径名 |
例子:
配置属性
常规
输出目录:$(SolutionDir)$(Configuration)\
中间目录:$(Configuration)\
目标文件名:$(ProjectName)
目标文件扩展名:.exe
生成日志文件:$(IntDir)\$(MSBuildProjectName).log
调试
命令:$(TargetPath),表示调试器要启动的exe全名,TargetPath就表示目标输出文件的全路径名,所以一般情况下它代表的值就等于“输出文件”属性代表的值
工作目录:$(ProjectDir)
VS 默认情况下会创建并使用预编译头文件(也就是自动创建 StdAfx.h 和 StdAfx.cpp 这两个文件),以便在编译时加快编译速度,预编译器将它编译后,会生成一个 Pre-compiled header ,也就是 pch 文件,这样下次就可以直接使用这里已经编译好了的代码了。
参考来源链接
由于下面这篇博文讲得很清晰很完整,所以我选择大段复制,非常感谢博文原作者的工作。
vs工程 vcproj和开发环境定义宏---- ( I n t D i r ) 和 (IntDir)和 (IntDir)和(OutDir)
vs的宏