以下是针对VS2013下的VC++项目:
Debug和Release说明:
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合。
VS的目录结构:
VS采用解决方案+项目的结构,一个解决方案可以包含多个项目。
每个解决方案(比如Solution)都会有个目录Solution,里面包含解决方案配置文件(Solution.sln和Solution.sdf)和输出文件(Debug或者Release)。
在该解决方案下新建项目Pro1,就会在Solution目录下新建一个Pro1的文件夹,Pro1文件夹下包含项目配置文件(Pro1.vcxproj)、中间文件(Debug或Release),同时所有.cpp和.h文件都会在该文件夹下面。
由上面叙述可以总结出,管理器(解决方案或项目)都会对应一个总的文件夹,这个管理器文件夹下存放本管理器的配置文件以及子管理器。另外,默认情况下,项目属性设置的目录起点为项目配置文件所在位置,实际上就是项目头文件和源文件所在位置。
vs中建立默认的C#项目和建立默认的C++项目生成的目录结构是不一样的。如果是C#项目,则解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹(共两个东东),而项目总文件夹下包含c#源文件、项目配置文件proj、一个Properties属性文件夹、一个obj文件夹和一个bin文件夹,其中obj和bin文件夹下都包含debug和release两个文件夹。obj文件夹下存放中间编译结果(扩展名更加项目类型而不同),而bin文件夹下存放最终生成的结果(扩展名一般为exe或dll)。
如果是C++项目,则解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西。如果不使用Release编译,则没有对应的Release文件夹)。
VS的项目属性:
默认“常规“栏目中,“输出目录”为$(SolutionDir)$(ConfigurationName):调试时会在解决方案文件夹下建立一个Debug(ConfigurationName的值为Debug或Release)文件夹。该选项决定宏$(OutDir)的值和中间生成的链接器用的如xx.ilk和xx.pdb文件的输出位置。
$(ConfigurationName)表示工程的宏,可以在连接器-》输入-》附加依赖项中查看和修改(不建议)所有宏的具体值,如:$(SolutionDir)为解决方案的目录。
默认“链接器”栏目下的“常规”选项下的“输出文件”选项为$(OutDir)$(TargetName)$(TargetExt)。其中$(OutDir)由常规-》输出目录决定,$(TargetName)由常规-》目标文件名决定,$(TargetExt)由常规-》目标文件后缀决定。该选型决定最终输出的exe文件的位置。
如果常规-》目标文件名和常规-》目标文件后缀没有决定$(TargetName)$(TargetExt)的值,那么“链接器”栏目下的“常规”必须显示确定输出exe文件的文件名和后缀,然后启动调试生成exe后,根绝exe文件反向确定$(TargetName)$(TargetExt)的值。
总结:默认情况下“输出目录”和“输出文件”两个属性对应的目录是一样的,这样用着方便(当然,输出文件的值在输出目录的值的基础上还包含有exe文件名)。如果两个不一样,则中间生成的链接器用的如xx.ilk和xx.pdb文件等在输出目录,而最终生成的xx.exe文件在“输出文件”属性设置的目录中。
“调试”栏目中的“工作目录”项,这个属性默认情况下是空的,但表示工作目录是工程目录,也就是工程配置文件ssyy.vcproj所在目录。“工作目录”属性作用是程序通过VS运行后唯一识别的默认目录,即工作后只认识这个目录,进行文件的读写等操作都是对这个目录而言。注意:vs中工作目录的设置是给调试用的,也即你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。但是如果不使用vs的调试启动exe,而是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。所以如果发布的时候不把工作目录内的东西拷到exe所在的目录内,就会运行出错,因为此时工作目录不再是vs中设置的了,而是exe文件所在的目录。
“调试”栏目中的“命令(Command)”属性项,【这个属性表示调试器要启动的exe文件的全名】,包括路径名,默认为$(TargetPath),而TargetPath就表示目标输出文件的全路径名,所以一般情况下它代表的值就等于“输出文件”属性代表的值。
“链接器”栏目下的“输入”选项下的“附加依赖项”项。此项是设置程序链接时使用的静态库。相当于链接已经编译好了的“代码”。由此我们可以简单的认为这些库就相当于我们自己写的.cpp文件,只不过这些库是编译好了的.cpp而已。
另外:VC++这个选项下面的相关目录表示VS所包含的C++的库的位置和信息。
部分参考:http://blog.csdn.net/yyhero1/article/details/19272637