Visual Studio下各目录中存放不同的东西,涉及到各项目的属性配置,这里做一个小总结。
- 一个解决方案包含若干个项目,假设新建一个项目ssyy, 解决方案起名为fangan,此时生成的最外层目录即为fangan(整个解决方案的内容都在这个文件夹内),其中包含解决方案配置文件fangan.sln和一个ssyy文件夹(整个ssyy项目的所有内容都在这个文件夹内),ssyy文件夹包含项目配置文件ssyy.vcproj和头文件.h以及源文件.cpp。如果在解决方案fangan下再建立一个新项目ssyy2,则会在fangan文件夹下生成一个ssyy2文件夹。
- 另外,项目属性设置的目录起点为项目配置文件所在位置,即在项目头文件源文件位置。
- 对于C++项目,解决方案总文件夹下包含解决方案配置文件sln、项目总文件夹、Debug文件夹以及Release文件夹,其中Debug和Release文件夹存放生成的结果exe和dll,而项目总文件夹下包含C++源文件、头文件、Debug和Release文件夹(此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西)。
新建的VC++项目,默认输出目录为$(SolutionDir)\$(ConfigurationName),所以在调试时会在解决方案文件夹下建立一个Debug(ConfigurationName的值为Debug)文件夹,并在此文件夹下生成ssyy.lik链接器和ssyy.exe文件。默认中间目录为$(ConfigurationName),所以会在ssyy项目文件夹下建立一个Debug文件夹,并在该文件夹下生成ssyy.obj二进制文件。
默认输出文件为$(OutDir)\$(ProjectName).exe,其中$(OutDir)由输出目录赋值。
$(TargetDir)和$(TargetPath)是生成exe文件之后自动赋予exe文件所在的文件目录和文件地址。
输出目录的属性只起到对$(OutDir)赋值的作用,与生成的.exe文件存放的位置没有任何关系,这个位置仅由输出文件决定。如果两者不一样,则中间生成的链接器用的xx.ilk和xx.pdb文件等在输出目录,而最终生成的xx.exe文件位置由输出文件决定。
工作目录默认为空,即表示为ssyy.vcproj所在目录,它是程序运行后唯一识别的目录,例如程序运行过程中生成一个txt文件,若未指定路径,只指定文件名,那这个文本默认就会建立在工作目录中,当然读取一些配置文件也在工作目录中查找。需要注意,生成的exe文件与工作目录没有任何关系,也不会放在工作目录(通常放在解决方案目录Debug文件夹里)。
vs的工作目录是给调试用的,调试开始后,启动对应的exe文件。如果直接双击exe程序,则其工作目录被设置为exe文件所在的目录,这是和vs启动调试不同的地方,如果不把工作目录中的东西拷到exe所在的目录,就会运行出错。- 命令属性项表示:调试器要启动的exe文件的全名,默认为$(TargetPath)
- 附加依赖项设置程序链接时使用的静态库,相当于链接已经编译好了的“代码”,由此我们可以认为这些库相当于我们自己写的.cpp文件,只不过这些库是编译好了的.cpp而已(这里只需要库名称,搜索路径另外设置)
库名称
搜索地址
附加依赖项的设置相当于如下代码#pragma comment(lib, "xx.lib")
,如果使用相对路径则如下#pragma comment(lib, "..\\debug\\xx.lib")
,使用双斜杠,因为它是由程序解释的双引号包括的字符串,需要转义,而#include "..\debug\xx.h"
并不是由程序解释的字符串,不用转义