T573029173的个人博客分享 http://blog.sciencenet.cn/u/T573029173

博文

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

已有 17136 次阅读 2014-10-11 15:10 |系统分类:教学心得| 项目, Visual, 解决方案, 软件开发, Studio

【此文为网络资料整理版】

这几天刚好要做一个决策支持系统软件的框架搭建,看到网上一些较好的资料整理了下,给大家分享。

一、Visual Studio 项目的文件组织方式

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

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

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

1 项目配置常用的系统变量名和意义


1是某一个工程设置的例子,下面的案例中是以新建一个MyProject的项目为例:

1

注意:从上图可以看出,TargetDir指目标目录,是一个目录。而TargetPath是目标路径,包括具体的文件名。

2.1  常规> 输出目录

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

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

2.2  常规> 中间目录

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

2.3  链接器> 常规> 输出文件

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


2

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

2.4  调试> 命令

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

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


3

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

2.5  调试> 工作目录

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

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

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

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


4

三、案例操作演示

3.1  前期准备工作

为了增强读者对前面内容的理解,此部分将通过一个实际的案例对其进行演示,假设我们期望的目录结构如下图所示。解决方案的名称为GMA,包含一个动态链接库项目ChocolateMilk(生成dll)和一个应用程序项目PureMilk(生成exe),需要使用一个第三方库log4cxx(Apachelog4jC++移植版本,用于日志输出)log4cxx是以动态库的方式编译的,所以我们需要它的①导入库(log4cxxd.lib),②头文件和③动态链接库(log4cxx.dll),分别位于LibIncludeBin中。


5

1)        GMA是解决方案目录

2)        PureMilkChocolateMilk是项目目录

3)        Lib目录用于存放导入库或者静态库(包括第三方库和用户项目生成库)

4)        Include用于存放第三方库的头文件

5)        Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,分ReleaseDebug两个版本。另外,程序运行过程中需要外部的数据文件和启动时需要的配置文件等等都可放于该目录

6)        Temp用于存放临时生成文件,其中Compile存放编译器编译时生成的obj文件,Link存放链接器的输出文件。

7)        PureMilkChocoliteMilk两个项目的头文件和源文件位置不要动,仍然在各自的项目文件夹内。

上面目录结构清晰,一目了然,当我们的程序需要制作安装包时我们只需将“Bin/Release”目录下的所有文件打包。而在发布和转移源码时我们可以打包除了Temp目录以外“GMA”目录下的所有文件和目录。如果不需要执行档,还可不包括Bin文件。

然而,VC 2008( VS 2008) 并不会自动为用户准备好上面的所有的配置,其中一些工作的需要用户修改项目的缺省设置来完成。

1)        使用“/GMA/Temp/Compile/”作为项目编译时使用的中间目录

2)        使用“/GMA/Temp/Link/”作为项目链接的输出目录

3)        当项目是应用程序时,在构建结束后拷贝执行文件到“/GMA/Bin/Release/”“/GMA/Bin/Debug/”,当项目是动态链接库时,除了拷贝dllBin,还拷贝导入库到“/GMA/Lib/”

4)        当项目是应用程序时,调试时运行“/GMA/Bin/Debug/”“/GMA/Bin/Release/”下面的执行文件,并以“/GMA/Bin/Debug/”“/GMA/Bin/Release/”为工作目录

3.2  开始两个项目配置属性设置

3.2.1       动态链接库项目ChocolateMilk配置属性

1)        使用“/GMA/Temp/Compile/”作为项目编译时使用的中间目录

2)        使用“/GMA/Temp/Link/”作为项目链接的输出目录


6

注意高亮的部分,首先将配置改成All Configuration(全部配置),这样可以让我们同时修改DebugRelease的部分;

Output Directory(输出目录,链接器)栏位填入:

$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)

Intermediate Directory(中间目录,编译器)栏位填入:

$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)

3)        默认设置的dlllib生成文件为输出目录中,因此构建结束后拷贝动态链接库到“/GMA/Bin/Release/” “/GMA/Bin/Debug/”,拷贝导入库到“/GMA/Lib/”

我们通常都会在Debug版本的输出库后面加上字母“d”以表示这是Debug版本,在Debug配置下,修改Import Library属性为$(TargetDir)$(TargetName)d.lib


7

为了实现构建结束后动态链接库和导入库的拷贝,VC可以让我们设置构建前后执行的脚本程序,需要我们写构建后执行的脚本:


8

由于VC中缺少表示导入库的系统变量值,所以在Command Line设置时需要分别设置

Debug配置下:

copy “$(TargetPath)” “$(SolutionDir)\Bin\$(ConfigurationName)\”

copy “$(TargetDir)$(TargetName)d.lib” “$(SolutionDir)\Lib\”

Release配置下:

copy “$(TargetPath)” “$(SolutionDir)\Bin\$(ConfigurationName)\”

copy “$(TargetDir)$(TargetName).lib” “$(SolutionDir)\Lib\”

3.2.2       应用程序项目PureMilk配置属性

1)        使用“/GMA/Temp/Compile/”作为项目编译时使用的中间目录

2)        使用“/GMA/Temp/Link/”作为项目链接的输出目录

将配置改成All Configuration,这样可以让我们同时修改DebugRelease的部分;

OutputDirectory(输出目录,链接器)栏位填入:

$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)

IntermediateDirectory(中间目录,编译器)栏位填入:

$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)

3)        构建结束后拷贝执行文件到“/GMA/Bin/Release/”“/GMA/Bin/Debug/”

Command Line中填入,All配置下:

copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName);

4)        调试时运行“/GMA/Bin/Debug/”“/GMA/Bin/Release/”下面的执行文件,并以“/GMA/Bin/Debug/”“/GMA/Bin/Release/”为工作目录


9

Command栏填入:

$(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)

WorkingDirectory栏填入:

$(SolutionDir)\Bin\$(ConfigurationName)




https://blog.sciencenet.cn/blog-1813407-834830.html


下一篇:基于EVS平台的污染场地修复三维空间插值相关资料收集
收藏 IP: 219.239.83.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

IP: 125.125.171.*   | 鐠э拷 鐠э拷 +1 [14]zdzszl   2011-4-17 09:58
閸涢潧鎳欓敍灞炬О閺呮碍鍨滅拠鏇犳絻閻€劏绻栭弬瑙勭《閸樿鍨庨弸鎰啊娑撳绱濋弫鍫熺亯鏉╂ɑ妲搁幐鍝勩偨閻ㄥ嫨鈧拷
閸ョ偛顦�  閿涳拷 婵傝棄鎲栭敍锟�
2011-4-17 11:341 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 125.125.169.*   | 鐠э拷 鐠э拷 +1 [13]zdzszl   2011-4-16 12:09
閺佸懘娈伴弽鎴濆瀻閺嬫劕鎷伴幋鎴滄粦閻滄澘婀崷銊х埡缁屽墎娈戦弽鍝ユ暩娴滃鏅犲Ο鈩冨珯瀹割喕绗夋径姘倱娑撯偓娑擃亜鍤崣鎴犲仯閵嗗倸銈介崓蹇斿亶鏉╂瑤閲滈弴鏉戝閸忋劑娼版稉鈧悙骞库偓锟�
閸ョ偛顦�  閿涳拷 鐠嬨垼闃跨拠鍕啈閿涗焦鏅犻梾婊勭埐閸掑棙鐎界亸杈ㄦЦ鏉╂瑦鐗遍崑姘崇箖閺夈儳娈戦妴锟�
2011-4-16 16:421 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 125.71.132.*   | 鐠э拷 鐠э拷 +1 [12]瀵姴鍩勯崡锟�   2011-3-30 21:36
閸涢潧鎳�,婵″倹鐏夐崚鍡樼€介柌宥呫亣缁崵绮洪梻顕€顣介張澶嬫櫏,闁絼绠為張顏呮降娑撴牜鏅柌锟�,閺勵垰鎯侀崣顖欎簰鐏忔繆鐦亸鍡樻櫊闂呮粍鐖查崚鍡樼€介悽銊ょ艾MIS鐠囧嫪鍙婇崨锟�?閸涢潧鎳�,濮e繑顐奸弶銉﹀珦鐠佸灝宕ユ稉濠氬厴閺堝鏁归懢锟�....妤傛ê鍙�!!!....鐠嬨垼闃�!!!....
閸ョ偛顦�  閿涳拷 閳ユ粌鐔€娴滃孩鏅犻梾婊勭埐閻ㄥ嫬褰查棃鐘斥偓褑鐦庢导鎷岀箷閺勵垰褰堥崚鏉挎倗閺傚湱娈戦幐鎴炲灛閵嗗倵鈧拷
2011-3-31 08:351 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 202.118.240.*   | 鐠э拷 鐠э拷 +1 [11]闁厼婧呭ú锟�   2011-3-29 20:47
閸楁矮瀵屾妯虹溈瀵よ櫣鎽敍灞藉従鐎圭偞鍨滄禒銉ュ閺堝浼撻悞鑸靛厒閸掓媽绻冪猾璁虫妧閻ㄥ嫰妫舵0姗堢礉鐏忚鲸妲告俊鍌欑秿鐠佲晝閮寸紒鐔锋勾鐠囧嫪鐜稉鈧稉顏呯€崗璺侯槻閺夊倻閮寸紒鐔烘畱閸欘垶娼幀褝绱濈€瑰鍙忛幀褏鐡戦敍灞肩稻閺勵垱鐥呮潻娑滎攽娑撴捇妫惃鍕箒閸忋儳鐖虹粚璁圭礉娑撳秶鐓℃俊鍌欑秿鐞涖劏鎻猾璁虫妧閻ㄥ嫰妫舵0妯糕偓鍌氬触娑撹崵鐣婚弰顖濐唨閹存垵绱戞禍鍡欐簜閻e被鈧拷
閸ョ偛顦�  閿涳拷 鐠嬨垼闃块敍锟�
2011-3-30 08:081 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 166.111.49.*   | 鐠э拷 鐠э拷 +1 [10]瀵姳绱�   2011-3-29 17:28
"閹存垼顫庡妤嬬窗閺嶈婀伴梻顕€顣介崣顖濆厴鏉╂ê婀禍搴f暏娑撯偓娑擃亝鏆熼弶銉ㄣ€冨浣哥暔閸忋劍鈧勬Ц閸氾箑褰茬悰锟�",閹劍妲哥€靛湱娈�,閸欘亝婀佺€规碍鈧勵劀绾喚娈戦崺铏诡攨娑擄拷,閹靛秴褰查懗鍊熺箻娑撯偓濮濄儳鏁ょ€规岸鍣虹悰銊ㄦ彧閹诲繗鍫�.
IP: 59.41.62.*   | 鐠э拷 鐠э拷 +1 [9]瀵姵鐖叉锟�   2011-3-29 16:29
閸欘亣顩﹂柇锝勯嚋鐏忓繐鐭濇稉濠囨肠娑擃厾娼冮崙鐘垫娑擃亝鐗抽崣宥呯安閸棴绱濋崙杞扮皑閺佸懏浜归幀鏇熸Ц鏉╃喐妫惃鍕┾偓锟�
閸ョ偛顦�  閿涳拷 閺冾澀绗夌€瑰鍙忛敍灞藉嫉娑撳秴褰查棃鐘偓锟�
2011-3-29 17:211 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 202.118.240.*   | 鐠э拷 鐠э拷 +1 [8]闁厼婧呭ú锟�   2011-3-29 15:51
閺堝浜鹃悶鍡礉閻梻鈹�,娴犲鍣搁柆鎾圭箼閵嗗倹鍨滈惃鍕劅娑旓拷
閸ョ偛顦�  閿涳拷 娴滆櫣琚悽鐔风摠鐎瑰鍙忛幀缁樻Ц娑撯偓娑擃亝娅橀柅鍌滄畱閻╊喗鐖i妴锟�
2011-3-29 17:221 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 112.91.148.*   | 鐠э拷 鐠э拷 +1 [7]闁崬妲堥弬锟�   2011-3-29 12:39
闁俺绻冩潻娆愵偧娴滃娆㈤敍灞惧灉閹扮喎鍩岄敍灞兼眽缁崵浼冪紒婵呯艾閼奉亣闊╅崣鎴濈潔閻ㄥ嫭濡ч張顖滄畱濮掑倻宸肩搾濠冩降鐡掑﹤銇囨禍鍡愨偓锟�
閸ョ偛顦�  閿涳拷 閹存垳绡冮張澶婃倱閹扮喆鈧倷姹夌猾鏄忣洣婵傚€熷殰娑撹桨绠i妴锟�
2011-3-29 14:501 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 117.136.0.*   | 鐠э拷 鐠э拷 +1 [6]闂勫牐绶�   2011-3-29 12:31
閸掑洤鐨电拠楦跨閸掆晜鐗抽悽鐢电彲閺佸懘娈版担鍨噯閸ワ拷4500楠炶櫕鏌熼崗顒勫櫡閸欐ɑ鍨氶弮鐘辨眽閸栫尨绱濋崗鑸电壋鏉堟劕鐨犻柆宥呭挤閸忋劍顑傚ú灞傗偓锟�
============================
婵″倹鐏夐弮銉︽拱闁參浜f稉搴″瀼鐏忔棁顕拹婵嗗焺閸氬本鐗遍惃鍕皑閺佸拑绱濇稉顓炴禇娴兼艾褰堥崚鏉垮閸濆秴鎮ч敍锟�

閸ョ偛顦�  閿涳拷 閹存垶鍏傞弰顖欑瑝閸欘垶浼╅崗宥忕礉娑撳秷绻冭ぐ鍗炴惙娑撳秳绱版径顏勩亣閵嗗倸娲滄稉鐑樼槷鏉堝啳绻欓崲娑崇磼
2011-3-29 14:481 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 124.16.128.*   | 鐠э拷 鐠э拷 +1 [5]junlicao9002   2011-3-29 11:35
  
IP: 166.111.49.*   | 鐠э拷 鐠э拷 +1 [4]瀵姳绱�   2011-3-29 11:34
閸斻劍鈧焦鏅犻梾婊勭埐閸掑棙鐎介悶鍡氼啈娑撳孩鏌熷▔鏇氱瘍濞屸剝婀佸☉澶婂挤閺嶈婀伴梻顕€顣�.
閸ョ偛顦�  閿涳拷 閹存垼顫庡妤嬬窗閺嶈婀伴梻顕€顣介崣顖濆厴鏉╂ê婀禍搴f暏娑撯偓娑擃亝鏆熼弶銉ㄣ€冨浣哥暔閸忋劍鈧勬Ц閸氾箑褰茬悰灞烩偓锟�
2011-3-29 14:461 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 99.231.66.*   | 鐠э拷 鐠э拷 +1 [3]鐞氫浇鎼愮拋锟�   2011-3-29 11:34
閸嬫矮绨¢敍灞肩稻閺勵垰鐔€閺堫兛绗傛禒宥囧姧婢跺嫪绨珿IGO閻ㄥ嫰妯佸▓鐐光偓鍌氬綗閿涙碍鐗抽悽鐢电彲娑撳氦鍩呮径鈺€绗夋径顏冪閺嶉娈戦崷鐗堟煙閺勵垽绱濋弮銏℃箒閺佸懘娈伴弽鎴礉閸欏牊婀佹禍瀣╂閺嶆垯鈧拷
閸ョ偛顦�  閿涳拷 鐠嬨垼闃跨悰銉ュ帠閿涳拷
2011-3-29 14:441 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 166.111.49.*   | 鐠э拷 鐠э拷 +1 [2]瀵姳绱�   2011-3-29 11:33
娴滃鐤勭悰銊︽,閸楀厖濞囬崑姘啊閺佸懘娈伴弽鎴濆瀻閺嬶拷,娑旂喐妲告稉宥呯暚婢跺洨娈戦幋鏍︾瑝濮濓絿鈥橀惃锟�.閸樼喎娲�.....?
閸ョ偛顦�  閿涳拷 鐠嬨垼闃跨拠鍕啈閿涗焦鏅犻梾婊勭埐閺傝纭堕搹鐣屽姧閸欐鍩岄崥鍕煙闂堛垻娈戠拹銊ф瀿閿涘奔绲鹃弰顖濈箷閺勵垱婀佹禍鍝勬躬閸嬫氨鐖虹粚韬测偓锟�
2011-3-29 14:431 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |
IP: 166.111.49.*   | 鐠э拷 鐠э拷 +1 [1]瀵姳绱�   2011-3-29 11:19
閺佸懘娈伴弽鎴濆瀻閺嬫劗娈戠拹銊╁櫤闂傤噣顣藉鍫ュ櫢鐟曪拷:濮濓絿鈥橀幀顪㈡稉鈧懛瀛樷偓顪㈤惄绋款嚠鐎瑰苯顦幀锟�,鐟欙拷(閼藉甯稊瀣檨1)閸楁碍鏋�,韫囧懐鍔ч棁鈧憰浣规煀閻ㄥ嫮鎮婄拋杞扮瑢閺傝纭�.
閸ョ偛顦�  閿涳拷 閻ㄥ嫮鈥樻俊鍌涱劃閿涳拷
2011-3-29 14:401 濡ょ》绱欓崶鐐差槻濡ら棿瀵岄敍锟� 鐠э拷 鐠э拷 +1 |

1/1 | 閹槒顓�:14 | 妫f牠銆� | 娑撳﹣绔存い锟� | 娑撳绔存い锟� | 閺堫偊銆� | 鐠哄疇娴�

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2025-2-20 23:44

Powered by ScienceNet.cn

Copyright © 2007-2025 中国科学报社

返回顶部