您的位置:首页 > 其它

VisualStudio 路径和项目属性配置

2015-06-03 11:43 267 查看
VC++项目解决方案总文件夹下只包含解决方案配置文件sln、一个项目文件夹(如果有多个工程,则分别对应多个工程文件夹)、一个Debug文件夹、一个Release文件夹(其中Debug和Release文件夹中存放最终生成的结果exe或dll,如果不使用Release则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件、一个Debug、一个Release文件夹(此处Debug和Release文件夹仅存放中间编译结果obj,不存exe和dll之类东西)。



“General“->“OutputDirectory”为$(SolutionDir)$(Configuration)\,(Configuration的值为Debug或Release,此处即为$(OutDir)属性赋值),为链接器用的如xx.ilk和xx.pdb文件等的输出目录,“Intermediate
Directory”为$(Configuration),而对于“Linker”-> “General”->“Output File”选项为$(OutDir)\$(ProjectName)${TargetExt},决定了输出${TargetExt}(一般为.exe)文件的位置,如下图所示。



“Debugging”->“Command”项,使用调试时从哪里启动exe文件,默认$(TargetPath),表示目标输出文件的全路径名,所以一般情况下它代表的值就等于“Output File”属性代表的值。“Debugging”->“WorkingDiretctory”项,默认$(ProjectDir),表示工程文件目录。Working
Diretctory表示进行某项操作的目的目录,会随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。“WorkingDiretctory”属性作用是程序运行后唯一识别的默认目录,是程序运行过程中默认读取的目录,代码中用GetCurrentDirectory之类的函数获取,工作后只认识这个目录,(可将所依赖的lib和dll库文件所在目录设为工作目录,但一般是把lib放在解决方案下的Lib目录中,把dll放在解决方案下的Bin目录中)。工作目录对于dll,如果是程序运行前就进入内存有点像静态链接那样,此时dll就可以放入exe所在的执行目录,如果dll是运行中动态加载的(比如插件),一般放在工作目录。需要注意vs中工作目录的设置是给调试用的,即你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。但如果是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。所以如果发布的时候不把工作目录内的东西拷到exe所在的目录内,就会运行出错,因为此时工作目录不再是vs中设置的了,而是exe文件所在的目录。



项目设置中可以使用的宏,常用的有:

Configuration
配置名字,通常是Debug或者Release
IntDir
编译器使用的中间目录,产出obj文件
OutDir
链接器使用的输出目录
ProjectDir
项目目录
ProjectName
项目名字
SolutionDir
解决方案目录
TargetDir
目标输出文件所在的目录
TargetExt
目标输出的扩展名
TargetFileName
目标输出文件名,包括扩展名
TargetName
目标输出名,不包括扩展名
TargetPath
目标输出文件的全路径名
注意:调试栏目下的所有选项都是为了调试服务的,如果不用调试按钮,这些选项就不起作用。至于VC++目录以及C/C++栏目是给编译器起作用的,告诉编译器在哪里寻找头文件、库文件之类的事情,或者设置其他一些编译器选项。一些具体的案例请参考:http://blog.163.com/zhang_bo1983/blog/static/16992223020123753334981/
开发过程中, Visual Studio 链接外部 lib 及 dll 文件如何配置:
1. 直接添加到系统的 PATH变量里
方法最简单直接,坏处是会影响全局的 PATH 设置,尤其是包含着大量测试用 dll 时。

2. 在 Visual Studio 全局设置里,把 dll 所在目录添加到 PATH 里:
通过 Visual Studio 菜单 ==> 工具 ==> 选项 ==> 项目和解决方案 ==> VC++目录,在下拉框里选择"可执行文件",然后把 dll 所在路径添加进去。

3. 直接把所有 dll 拷贝到 Visual Studio 工程目录下,或是拷贝到生成可执行文件的文件夹(默认情况下是Debug 或 Release 目录)下:
这个方法也很简单,但是当你有若干个工程时,你每次更新 SDK 及其 dll 文件,你就要把所有的工程都更新,这个不符合文件唯一性的工程性准则。

4. 在调试程序时,让 Visual Studio 帮你切换当前工作目录到 dll 相应的目录下:
在 Visual Studio ==> Project ==> Properties ==> SelectConfiguration ==> Configuration Properties ==> Debugging ==> Workingdirectory 里填上 dll 所在目录,这样当在调试程序时,Visual Studio 会把当前工作目录切换到这个目录下,从而会自动读取本目录下的dll 文件。

这个方法的优点很明显,简单!副作用也很明显,在你切换了当前工作目录后,你可能会找不到程序的配置文件,在程序里写的诸如"./config.ini"全部都找不到了;另外,你要把所有的dll 都放到这个工作目录里,否则一样会提示说找不到 xxx.dll 的问题。

5. 最后一个方法,也是我认为最好的一个方法,在 VisualStudio 工程属性里把一个目录临时添加到 PATH 环境变量里:
MSDN 上也有类似的介绍:How to: SetEnvironment Variables for Projects,方法很简单,在"工程属性" ==> "调试" ==> "环境"里,添加类似如下所示的内容:

PATH=%PATH%;$(TargetDir)\DLLS

这样就可以把 $(TargetDir)\DLLS 临时添加到该工程所属的系统 PATH 里。

开发时可以根据项目的实际情况,灵活选用以上方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: