日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

VS2010项目配置详解

發(fā)布時(shí)間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2010项目配置详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先看一下項(xiàng)目設(shè)置中可以使用的宏(環(huán)境變量),常用的有:


ConfigurationName

配置名字,通常是Debug或者Release

IntDir

編譯器使用的中間目錄,產(chǎn)出obj文件

OutDir

鏈接器使用的輸出目錄

ProjectDir

項(xiàng)目目錄

ProjectName

項(xiàng)目名字

SolutionDir

解決方案目錄

TargetDir

目標(biāo)輸出文件所在的目錄

TargetExt

目標(biāo)輸出的擴(kuò)展名

TargetFileName

目標(biāo)輸出文件名,包括擴(kuò)展名

TargetName

目標(biāo)輸出名,不包括擴(kuò)展名

TargetPath

目標(biāo)輸出文件的全路徑名

下圖是某一個(gè)工程所有設(shè)置的例子:


注意:從上圖可以看出,TargetDir指目標(biāo)目錄,是一個(gè)目錄。而TargetPath是目標(biāo)路徑,包括具體的文件名


vs2010使用方案管理項(xiàng)目,一個(gè)解決方案下可包含多個(gè)項(xiàng)目。

默認(rèn)情況下,項(xiàng)目屬性的設(shè)置的目錄起點(diǎn)為項(xiàng)目配置文件所在的位置,實(shí)際上就是項(xiàng)目頭文件和源文件所在的位置。

vs2010中默認(rèn)建立C++項(xiàng)目,則解決方案總目錄下包含一個(gè)sln和一個(gè)項(xiàng)目文件夾,在vs2010編譯器中生成debug和release解決方案后,總目錄下還會(huì)生成對(duì)應(yīng)的debug和release目錄,存放最終生成的exe或dll文件,同時(shí)也會(huì)在項(xiàng)目文件夾下生成debug和release目錄(存放的是中間編譯文件obj)。

下面結(jié)合例子講一下:solution為創(chuàng)建的解決方案,demo為創(chuàng)建的項(xiàng)目

解決方案solution總目錄如下:

項(xiàng)目demo目錄如下:

?

項(xiàng)目配置及系統(tǒng)變量關(guān)系:

在vs2010的項(xiàng)目屬性頁(yè),會(huì)有一些系統(tǒng)變量,如下:

SolutionDir:解決方案目錄

Configuration:指debug或release

ProjectName:項(xiàng)目名字

OutDir:在?常規(guī)--輸出目錄 中定義的值,如$(SolutionDir)$(Configuration)\,表示XXX\lolution\debug\目錄值

IntDir:中間目錄

TargetDir:生成exe或dll文件所在位置,如鏈接器-常規(guī)-輸出文件為$(OutDir)$(TargetName)$(TargetExt)(即定義了exe輸出位置,也就決定了TargetDit的值),此時(shí)TargetDir表示在XXX\lolution\debug\

TargetName:目標(biāo)輸出名,不包括擴(kuò)展名

TargetPath:目標(biāo)輸出文件的全路徑名

ProjectDir:表示項(xiàng)目目錄值,一般在“調(diào)試-工作目錄”中設(shè)置該值

TargetExt:擴(kuò)展名

PlatformToolsetVersion:

ConfigurationName:配置名字,通常是Debug或者Release

默認(rèn)情況下“輸出目錄”和“輸出文件”對(duì)應(yīng)的目錄值是一樣的。

?

配置屬性

???????????? 常規(guī)

????????????????????? 輸出目錄:$(SolutionDir)$(Configuration)\ ? ? //即

????????????????????? 中間目錄:$(Configuration)\?

???????????????????? ?目標(biāo)文件名:$(ProjectName)

????????????????????? 目標(biāo)文件擴(kuò)展名:.exe

??????????????????????生成日志文件:$(IntDir)\$(MSBuildProjectName).log

??????????? 調(diào)試

?????????????????????命令:$(TargetPath),表示調(diào)試器要啟動(dòng)的exe全名,TargetPath就表示目標(biāo)輸出文件的全路徑名,所以一般情況下它代表的值就等于“輸出文件”屬性代表的值

???????????????????? 工作目錄:$(ProjectDir)

C/C++

????????? 預(yù)編譯頭

??????????????????? 預(yù)編譯頭輸出文件:$(IntDir)$(TargetName).pch

??????????輸出文件

??????????????????? ASM列表位置:$(IntDir)

??????????????????? 對(duì)象文件名:$(IntDir)

??????????????????? 程序數(shù)據(jù)庫(kù)文件名:$(IntDir)vc$(PlatformToolsetVersion).pdb

????????? 瀏覽信息

??????????????????? 瀏覽信息文件:$(IntDir)

鏈接器

????????? 常規(guī)

??????????????????? 輸出文件:$(OutDir)$(TargetName)$(TargetExt)

???????? 清單文件

?????????????????? 清單文件:$(IntDir)$(TargetName)$(TargetExt).intermediate.manifest

???????? 調(diào)試

????????????????? 生成程序數(shù)據(jù)庫(kù)文件:$(TargetDir)$(TargetName).pdb

??????? ?優(yōu)化:

????????????????? 按配置優(yōu)化數(shù)據(jù)庫(kù):$(TargetDir)$(TargetName).pgd



由上面敘述可以總結(jié)出,管理器(解決方案或項(xiàng)目)都會(huì)對(duì)應(yīng)一個(gè)總的文件夾,這個(gè)管理器文件夾下存放本管理器的配置文件以及子管理器。比如,解決方案是個(gè)管理器,它的文件夾下含有.sln配置文件以及子管理器ssyy項(xiàng)目和子管理器ssyy2項(xiàng)目。

另外,默認(rèn)情況下,項(xiàng)目屬性設(shè)置的目錄起點(diǎn)為項(xiàng)目配置文件所在位置,實(shí)際上就是項(xiàng)目頭文件和源文件所在位置。

補(bǔ)充:vs中建立默認(rèn)的C#項(xiàng)目和建立默認(rèn)的C++項(xiàng)目生成的目錄結(jié)構(gòu)是不一樣的。如果是C#項(xiàng)目,則解決方案總文件夾下就只包含解決方案配置文件sln和一個(gè)項(xiàng)目總文件夾(共兩個(gè)東東),而項(xiàng)目總文件夾下包含c#源文件、項(xiàng)目配置文件proj、一個(gè)Properties屬性文件夾、一個(gè)obj文件夾和一個(gè)bin文件夾,其中obj和bin文件夾下都包含debug和release兩個(gè)文件夾。obj文件夾下存放中間編譯結(jié)果(擴(kuò)展名更加項(xiàng)目類(lèi)型而不同),而bin文件夾下存放最終生成的結(jié)果(擴(kuò)展名一般為exe或dll)。

而如果是C++項(xiàng)目,則解決方案總文件夾下就只包含解決方案配置文件sln和一個(gè)項(xiàng)目總文件夾和一個(gè)Debug文件夾以及一個(gè)Release文件夾(共四個(gè)東東,其中Debug和Release文件夾中存放最終生成的結(jié)果exe或dll,要注意如果不使用Release生成,則不存在Release文件夾),而項(xiàng)目總文件夾下包含C++源文件頭文件、項(xiàng)目配置文件和一個(gè)Debug文件夾以及一個(gè)Release文件夾(一定要注意,此處的Debug和Release文件夾僅僅存放中間編譯結(jié)果obj,不存放exe和dll之類(lèi)的東西。如果不使用Release編譯,則沒(méi)有對(duì)應(yīng)的Release文件夾)。

由此可見(jiàn),c#項(xiàng)目默認(rèn)生成的文件目錄結(jié)構(gòu)更合理,且輸出的exe位于總項(xiàng)目文件夾內(nèi),而c++項(xiàng)目默認(rèn)exe位于解決方案總文件夾下。另外c#更合理在,C#使用Bin目錄,在Bin目錄下包含debug和release兩個(gè)目錄,而C++不使用Bin目錄,直接使用debug和releae兩個(gè)目錄。

?

其次,常用項(xiàng)目屬性和系統(tǒng)配置變量關(guān)系:

???????? 如果我們建立一個(gè)默認(rèn)的vc項(xiàng)目ssyy,他的默認(rèn)“常規(guī)“欄目中,“輸出目錄”為$(SolutionDir)$(ConfigurationName),所以調(diào)試時(shí)會(huì)在解決方案文件夾下建立一個(gè)debug(ConfigurationName的值為debug)文件夾,并在此文件夾下生成?ssyy.lik鏈接器?和ssyy.exe文件?。默認(rèn)“中間目錄”為$(ConfigurationName),所以會(huì)在ssyy項(xiàng)目文件夾下(即ssyy.vcproj的項(xiàng)目配置文件所在位置)建立一個(gè)debug文件夾,并在該文件夾下生成ssyy.obj二進(jìn)制文件。默認(rèn)“鏈接器”欄目下的“常規(guī)”選項(xiàng)下的“輸出文件”選項(xiàng)為$(OutDir)\$(ProjectName).exe,其中$(OutDir)就已經(jīng)在“常規(guī)”欄目的“輸出目錄”選項(xiàng)賦值了。【所以$(OutDir)的值是在“輸出目錄”屬性中定義的】。

??????? 另外,經(jīng)過(guò)實(shí)際測(cè)試,發(fā)現(xiàn)“輸出目錄”屬性只能起到對(duì)$(OutDir)系統(tǒng)變量賦值的作用,和“改變生成的.exe文件存放位置”沒(méi)任何關(guān)系。也就是說(shuō),如果“輸出目錄”中設(shè)置的$(OutDir)值在C盤(pán),而“輸出文件”中設(shè)置輸出文件的位置為D盤(pán),最終生成的exe文件會(huì)在D盤(pán),“輸出文件”屬性才決定輸出exe文件的位置。

??????? 而$(TargetDir)的值是在生成exe文件后自動(dòng)賦予值為exe文件所在位置。所以可以說(shuō),“輸出文件”最終決定exe文件所在的位置,也最終決定了$(TargetDir)的值,$(TargetPath)和$(TargetDir)的行為是類(lèi)似的,此不贅述。

??????? 上面兩段說(shuō)了這么多,總結(jié)就是,默認(rèn)情況下“輸出目錄”和“輸出文件”兩個(gè)屬性對(duì)應(yīng)的目錄是一樣的,這樣用著方便(當(dāng)然,輸出文件的值在輸出目錄的值的基礎(chǔ)上還包含有exe文件名)。如果兩個(gè)不一樣,則中間生成的鏈接器用的如xx.ilk和xx.pdb文件等在輸出目錄,而最終生成的xx.exe文件在“輸出文件”屬性設(shè)置的目錄中。

另外,上面兩段話(huà)可以總結(jié)出,當(dāng)調(diào)試程序時(shí),系統(tǒng)變量$(OutDir)的值是最先確定的,而$(TargetDir)和$(TargetPath)的值是在exe文件生成后才確定的。也就是說(shuō)系統(tǒng)變量$(OutDir)的值由VS項(xiàng)目的“輸出目錄”屬性決定,而$(TargetDir)和$(TargetPath)的值由VS項(xiàng)目的“輸出文件”屬性決定。即設(shè)置了VS的“輸出目錄”屬性就相當(dāng)于設(shè)置了$(OutDir)的值,“輸出目錄”是界面上的提示用于接收用戶(hù)輸入的配置信息,然后把這個(gè)具體的配置信息存入系統(tǒng)內(nèi)容的變量$(OutDir)中。

其它常用的屬性還有,“調(diào)試”欄目中的“工作目錄”項(xiàng),這個(gè)屬性默認(rèn)情況下是空的,但表示工作目錄是工程目錄,也就是工程配置文件ssyy.vcproj所在目錄。工作目錄表示進(jìn)行某項(xiàng)操作的目的目錄,會(huì)隨著OpenFileDialogSaveFileDialog等對(duì)象所確定的目錄而改變。“工作目錄”屬性作用是程序運(yùn)行后唯一識(shí)別的默認(rèn)目錄,即工作后只認(rèn)識(shí)這個(gè)目錄,工作目錄這個(gè)名字描述的就很形象,(可以將所依賴(lài)的libdll庫(kù)文件所在目錄設(shè)為工作目錄,但一般是把lib放在解決方案下的Lib目錄中,把dll放在解決方案下的Bin目錄中),例如程序運(yùn)行過(guò)程中生成一個(gè)txt文本文件,如果在創(chuàng)建文件過(guò)程中未指定絕對(duì)路徑,只指定創(chuàng)建文件的文件名,那么這個(gè)文本文件默認(rèn)就會(huì)建立在工作目錄中,當(dāng)然讀取一些配置文件也在工作目錄中查找,但要說(shuō)明一下,生成的exe文件跟工作目錄沒(méi)任何關(guān)系,也不會(huì)放在工作目錄中。總的來(lái)說(shuō),工作目錄就是程序運(yùn)行過(guò)程中默認(rèn)讀取的目錄。對(duì)于dll,如果是程序運(yùn)行前就進(jìn)入內(nèi)存有點(diǎn)像靜態(tài)鏈接那樣,此時(shí)dll就可以放入exe所在的執(zhí)行目錄,如果dll是運(yùn)行中動(dòng)態(tài)加載的一般放在工作目錄,比如插件就放在工作目錄。即工作目錄就是運(yùn)行期間唯一能識(shí)別的默認(rèn)目錄,工作目錄在代碼中用GetCurrentDirectory之類(lèi)的函數(shù)獲取,具體代碼間最下面的附1。工作目錄與執(zhí)行目錄可以不同,例如一個(gè)人住在北京,但他的工作地點(diǎn)不一定在北京,可能在天津。

對(duì)工作目錄的補(bǔ)充:vs中工作目錄的設(shè)置是給調(diào)試用的,也即你啟動(dòng)調(diào)試后,啟動(dòng)一個(gè)新進(jìn)程,自動(dòng)把這個(gè)新進(jìn)程的工作目錄設(shè)置為vs項(xiàng)目屬性中的工作目錄,然后新進(jìn)程啟動(dòng)對(duì)應(yīng)的exe程序。但是如果不使用vs的調(diào)試啟動(dòng)exe,而是直接雙擊exe文件啟動(dòng)一個(gè)新進(jìn)程時(shí),會(huì)自動(dòng)把這個(gè)新進(jìn)程的工作目錄設(shè)置為exe文件所在的目錄,這是和vs啟動(dòng)調(diào)試不同的地方。所以如果發(fā)布的時(shí)候不把工作目錄內(nèi)的東西拷到exe所在的目錄內(nèi),就會(huì)運(yùn)行出錯(cuò),因?yàn)榇藭r(shí)工作目錄不再是vs中設(shè)置的了,而是exe文件所在的目錄。最后,說(shuō)一下,vs中默認(rèn)的vc++工程的工作目錄項(xiàng)目的值是空的,代表默認(rèn)是vs工程所在目錄即.vcproj文件所在目錄,c#工程默認(rèn)沒(méi)測(cè)試,估計(jì)和vc的一樣。】

【同樣在調(diào)試選項(xiàng)下的和工作目錄選項(xiàng)同一級(jí)的選項(xiàng)“命令”選項(xiàng)是設(shè)置,使用調(diào)試時(shí),從哪里啟動(dòng)exe文件,因?yàn)橐话闵傻膃xe放在bin目錄下的debug或release目錄下,所以命令選項(xiàng)一般為“Bin\$(Configuration)\$(ProjectName).exe”,默認(rèn)也是這個(gè)值,當(dāng)然可以更改,但此時(shí)意味著調(diào)試狀態(tài)下啟動(dòng)的exe為“命令”選項(xiàng)中設(shè)置的exe文件,而不是默認(rèn)的bin目錄下的debug或release下的exe文件了。最后說(shuō)一下,上面所說(shuō)的“調(diào)試”是指vs下啟動(dòng)exe,包括debug模式和release模式,不要把調(diào)試就理解為只有debug模式。】

?

?“調(diào)試”欄目中的“命令(Command)”屬性項(xiàng),【這個(gè)屬性表示調(diào)試器要啟動(dòng)的exe文件的全名】,包括路徑名,默認(rèn)為$(TargetPath),而TargetPath就表示目標(biāo)輸出文件的全路徑名,所以一般情況下它代表的值就等于“輸出文件”屬性代表的值。當(dāng)然你也可以人為的更改“命令”屬性的值,比如更改為c:\aa.exe,而“輸出文件”的值為c:\bb.exe,此時(shí)如果輸出文件所在目錄沒(méi)有aa.exe的話(huà)(因鏈接器只生成bb.exe而根本不會(huì)生成aa.exe),調(diào)試器就不能啟動(dòng)aa.exe,提示找不到aa.exe。當(dāng)然如果目錄中已經(jīng)有aa.exe文件(可以強(qiáng)制賦值一個(gè)bb.exe文件的副本并命名為aa.exe),此時(shí)調(diào)試器就可以正常調(diào)試通過(guò)。

“鏈接器”欄目下的“輸入”選項(xiàng)下的“附加依賴(lài)項(xiàng)”項(xiàng)。此項(xiàng)是設(shè)置程序鏈接時(shí)使用的靜態(tài)庫(kù)。相當(dāng)于鏈接已經(jīng)編譯好了的“代碼”。由此我們可以簡(jiǎn)單的認(rèn)為這些庫(kù)就相當(dāng)于我們自己寫(xiě)的.cpp文件,只不過(guò)這些庫(kù)是編譯好了的.cpp而已(這里只需要庫(kù)名稱(chēng)即可,搜索路徑在其他地方設(shè)置)。

“附加依賴(lài)性的設(shè)置”等同于在代碼中寫(xiě)“#pragma comment(lib, "庫(kù)名稱(chēng).lib") ”語(yǔ)句,如果使用相對(duì)路徑則如下:

#pragma comment(lib,"..\\debug\\TestLib.lib");其中的反斜杠要用雙反斜杠,因?yàn)樗浅绦蚪忉尩碾p引號(hào)包括的字符串,需要轉(zhuǎn)義一下,要區(qū)別include,#include "..\TestVideoApplication.h"中并不是由程序解釋的字符串,所以不用轉(zhuǎn)義




總結(jié)

以上是生活随笔為你收集整理的VS2010项目配置详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。