VS项目属性配置简介

转载自 Visual Studio项目属性的一些配置项的总结

VS项目的文件组织方式

VC6.0之后的VC (VS)系列使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。VS中的每个管理器(解决方案或项目)都会对应一个总的文件夹,这个管理器文件夹下存放本管理器的配置文件以及子管理器。以C#项目为例,解决方案管理器总文件夹下包含解决方案配置文件*.sln和项目子管理器文件夹,而项目子管理器文件夹下包含C#源文件*.cs、项目配置文件*.csproj、Properties属性文件夹、obj文件夹和bin文件夹。其中obj和bin文件夹下各包含debug和release两个文件夹。obj文件夹下存放中间编译结果,bin文件夹下存放最终生成的exe或dll文件。

常用项目属性和系统默认配置变量

通常程序开发步骤包括编辑程序、编译程序、装配链接程序、程序调试测试、安装部署。表1给出了程序开发过程中常用的系统变量名和意义:

系统变量 变量含义
$(ConfigurationName) 配置名,通常是debug或release
$(IntDir) 编译器使用的中间目录,产出obj文件
$(OutDir) 链接器使用的输出目录
$(ProjectDir) 项目目录
$(ProjectName) 项目名
$(SolutionDir) 解决方案目录
$(TargetDir) 目标输出文件所在的目录,产生exe文件
$(TargetExt) 目标输出的扩展名
$(TargetFileName) 目标输出文件名,包括扩展名
$(TargetName) 目标输出名,不包括扩展名
$(TargetPath) 目标输出文件的全路径名

常规—>输出目录

项目属性的“常规”栏目中“输出目录(OutDir)”的作用是给$(OutDir)系统变量赋值,其默认属性值为$(SolutionDir)$(ConfigurationName)$(SolutionDir)表示解决方案目录,$(ConfigurationName)的值为debug或release。启动编译后会在解决方案文件夹下建立debug文件夹。

也就是说默认情况下的输出目录是在解决方案目录下的debug或release文件夹下,当然这是针对C++型项目而言,C#型项目不一样。

常规—>中间目录

项目属性的“常规”栏目中,“中间目录(IntDir)”的作用是存储链接器所需的输入文件,默认属性为(ProjectDir)(ConfigurationName),编译后会在MyProject项目文件夹下建立一个debug文件夹,并在该文件夹下生成MyProject.obj二进制文件。

接器—>常规—>输出文件

项目属性的“链接器”栏目下,“常规”选项下,“输出文件”默认属性为$(OutDir)$(ProjectName).exe,其中$(OutDir)指的是输出目录,启动链接后,在输出目录下生成MyProject.exe文件。$(TargetDir)的值是由“输出文件”指定的目录决定的。也就是链接器最后生成的*.exe文件所在位置。

“输出目录”和“输出文件”两个属性对应的目录默认情况下是一样的,这样用着方便。如果两个不一样,则链接器所需的*.ilk*.pdb等中间文件在“输出目录”,而最终生成的exe文件在“输出文件”属性设置的目录中。

调试—>命令

项目的“输出目录”属性值决定着系统变量$(OutDir)的值,而项目的“输出文件”的属性值决定着$(TargetDir)$(TargetPath)的值。程序调试时,系统变量$(OutDir)的值是最先确定的,而$(TargetDir)$(TargetPath)的值是在链接器生成exe文件后才确定的。

“调试”栏目中的“命令(Command)”属性项,这个属性表示启动调试器时执行的exe文件“全路径名+文件名”,默认为链接器生成的$(TargetPath)目录,当然你也可以手动更改“命令”属性的值。

单击调试按钮(VS中的那个小三角形按钮),VS会起动图中所示目录下的exe文件。一般来说“链接器”—>“输出文件”与“调试”—>“命令”中的文件位置、名称是相同,以表示链接器生成的文件和调试时使用的文件一样。一言以蔽之,①<“调试”—>“命令”>、②TargetPath、③输出文件,④输出目录(OutDir) 默认情况下是处于同一个目录,并呈现出前一个紧密依赖于后一个的关系。

调试—>工作目录

工作目录(WorkingDirection )与执行目录(Command)可以不同,它是程序工作运行过程中默认读取的目录,调试时是将工作目录下的文件作为附加参数添加到执行目录的exe文件中去调试执行。“调试”栏目中的“工作目录”项,默认属性值为$(ProjectDir),即工程配置文件MyProject.vcproj所在目录,调试过程中它会随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。对于静态链接的lib和dll库文件可以放入exe所在的执行目录,而动态加载的dll一般放在工作目录,比如插件就放在工作目录。此外,程序运行过程中生成一个txt文本文件或读取一些配置文件,如果在创建或读取过程中未指定绝对路径,只指定其文件名,那么默认的路径就是工作目录。

VS中工作目录是用于调试过程,只有在调试时,VS才会把项目配置属性中的工作目录设置为执行进程的工作目录,然后再启动对应的exe程序。如果用户选择直接双击一个exe程度启动新进程,VS会自动把exe文件所在的目录设置为新进程的工作目录。因此,在软件部署发布的时候,需把工作目录内的文件拷贝到exe所在的执行目录内,否则就会运行出错。

链接器—>输入—>附加依赖项

“链接器”栏目下,“输入”选项下,“附加依赖项”属性。此项是设置程序链接时使用的静态库的名称。相当于链接已经编译好了的“代码”。由此我们可以简单的认为这些库就相当于我们自己写的源文件,只不过这些库是编译好了的源文件而已。

参考