VS2010程序输出路径参数设置

来源:互联网 发布:mysql拖动排序设计 编辑:程序博客网 时间:2024/05/16 02:25
解决方案和项目关系
假设新建一个项目ProjectExam,解决方案起名SolutionExam,此时生成的最外层目录为SolutionExam代表整个解决方案的内容都在这个文件夹内。在这个SolutionExam文件夹内包含有SolutionExam.sln的解决方案配置文件和一个ProjectExam文件夹。ProjectExam文件夹代表整个ProjectExam项目的所有内容都在这个文件夹内,这个文件夹内含有ProjectExam.vcproj的项目配置文件和.h头文件以及.cpp源文件。如果在SolutionExam解决方案下再建立一个新项目名为ProjectExam2,则会在SolutionExam文件夹下生成一个ProjectExam2文件夹存放ProjectExam2项目的所有内容。


通常解决方案文件夹下就只包含解决方案配置文件sln和一个或多个项目文件夹,以及一个Debug文件夹和一个Release文件夹。其中Debug和Release文件夹中存放最终生成的结果exe或dll。【分别使用debug模式和release模式编译后,才生成Debug文件夹和release文件夹】。每个项目文件夹下包含C++源文件,头文件,项目配置文件,一个Debug文件夹,一个Release文件夹。此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西。
[文摘]VC2010项目配置环境$(TargetPath)


环境路径设置
项目属性设置的目录起点为项目配置文件所在位置,实际上就是项目头文件和源文件所在位置。


(1)项目“常规”栏目中:
“输出目录”【Output directory】为$(SolutionDir)$(ConfigurationName),所以调试时会在解决方案文件夹下建立一个debug(ConfigurationName的值为debug)文件夹,并在此文件夹下生成ProjectExam.lik链接器和ProjectExam.exe文件。
“中间目录”【Intermediate directory】为$(ConfigurationName),所以会在ProjectExam项目文件夹下(即ProjectExam.vcproj的项目配置文件所在位置)建立一个debug文件夹,并在该文件夹下生成ProjectExam.obj二进制文件。


(2)连接器“常规”栏目中:
“输出文件”【Output file】选项为$(OutDir)$(TargetName)$(TargetExt),其中$(OutDir)就已经在项目的“常规”栏目的“输出目录”选项赋值了。【$(OutDir)的值是在项目常规的“输出目录”属性中定义的】。
“输出目录”属性只能起到对$(OutDir)系统变量赋值的作用,和“改变生成的.exe文件存放位置”没任何关系。也就是说,如果“输出目录”中设置的$(OutDir)值在C盘,而“输出文件”中设置输出文件的位置为D盘,最终生成的exe文件会在D盘。
$(TargetDir)的值是在生成exe文件后自动赋予值为exe文件所在位置。“输出文件”最终决定exe文件所在的位置,也最终决定了$(TargetDir)的值,$(TargetPath)和$(TargetDir)的行为是类似的。系统变量$(OutDir)的值由VS项目的“输出目录”属性决定,而$(TargetDir)和$(TargetPath)的值由VS项目的“输出文件”属性决定。


(3)调试用工作目录
“调试”栏目中的“工作目录”【Working directory】项,这个属性默认情况下是$(ProjectDir), 但表示工作目录是项目目录,也就是项目配置文件ProjectExam.vcproj所在目录。工作目录表示进行某项操作的目的目录,会随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。例如程序运行过程中生成一个txt文本文件,如果在创建文件过程中未指定绝对路径,只指定创建文件的文件名,那么这个文本文件默认就会建立在工作目录中,当然读取一些配置文件也在工作目录中查找,但要说明一下,生成的exe文件跟工作目录没任何关系,也不会放在工作目录中。总的来说,工作目录就是程序运行过程中默认读取的目录。即工作目录就是运行期间唯一能识别的默认目录,工作目录在代码中用GetCurrentDirectory之类的函数获取。工作目录与执行目录可以不同,例如一个人住在北京,但他的工作地点不一定在北京,可能在天津。
你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。但是如果不使用vs的调试启动exe,而是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。


(4)调试中的命令
同样在调试选项下的和工作目录选项同一级的选项“命令”选项是设置,使用调试时,从哪里启动exe文件,默认是$(TargetPath),当然可以更改。调试状态下启动的exe为“命令”选项中设置的exe文件,而不是默认的bin目录下的debug或release下的exe文件了。最后说一下,上面所说的“调试”是指vs下启动exe,包括debug模式和release模式,不要把调试就理解为只有debug模式。
"调试”栏目中的“命令(Command)”属性项,默认为$(TargetPath),而TargetPath就表示目标输出文件的全路径名,所以一般情况下它代表的值就等于“输出文件”属性代表的值。当然你也可以人为的更改“命令”属性的值。


(5)连接器的输入选项
“链接器”栏目下的“输入”选项下的“附加依赖项”项。此项是设置程序链接时使用的静态库。相当于链接已经编译好了的“代码”。由此我们可以简单的认为这些库就相当于我们自己写的.cpp文件,只不过这些库是编译好了的.cpp而已(这里只需要库名称即可,搜索路径在其他地方设置)。
"附加依赖性的设置”等同于在代码中写“#pragma comment(lib, "库名称.lib") ”语句,如果使用相对路径则如下:
#pragma comment(lib,"..\\debug\\TestLib.lib");
其中的反斜杠要用双反斜杠,因为它是程序解释的双引号包括的字符串,需要转义一下。
注意:
#include "..\TestVideoApplication.h" 中并不是由程序解释的字符串,所以不用转义。


附录:常用设置宏
ConfigurationName 配置名字,通常是Debug或者Release
IntDir 编译器使用的中间目录,产出obj文件
OutDir 链接器使用的输出目录


ProjectDir 项目目录
ProjectName 项目名字
SolutionDir 解决方案目录


TargetDir 目标输出文件所在的目录
TargetExt 目标输出的扩展名
TargetFileName 目标输出文件名,包括扩展名
TargetName 目标输出名,不包括扩展名
TargetPath 目标输出文件的全路径名
原创粉丝点击