1. 程式人生 > >VisualStudio 路徑和專案屬性配置

VisualStudio 路徑和專案屬性配置

VC++專案解決方案總資料夾下只包含解決方案配置檔案sln、一個專案資料夾(如果有多個工程,則分別對應多個工程資料夾)、一個Debug資料夾、一個Release資料夾(其中Debug和Release資料夾中存放最終生成的結果exe或dll,如果不使用Release則不存在Release資料夾),而專案總資料夾下包含C++原始檔標頭檔案、專案配置檔案、一個Debug、一個Release資料夾(此處Debug和Release資料夾僅存放中間編譯結果obj,不存exe和dll之類東西)。

 

“General“->“OutputDirectory”$(SolutionDir)$(Configuration)\

(Configuration的值為DebugRelease,此處即為$(OutDir)屬性賦值)為鏈接器用的如xx.ilkxx.pdb檔案等的輸出目錄,“Intermediate Directory”為$(Configuration),而對於“Linker”-> “General”->“Output File”選項為$(OutDir)\$(ProjectName)${TargetExt}決定了輸出${TargetExt}(一般為.exe)檔案的位置,如下圖所示。

 

“Debugging”->“Command”項,使用除錯時從哪裡啟動exe檔案,預設$(TargetPath)

表示目標輸出檔案的全路徑名,所以一般情況下它代表的值就等於“Output File”屬性代表的值。“Debugging”->“WorkingDiretctory”項,預設$(ProjectDir)表示工程檔案目錄。Working Diretctory表示進行某項操作的目的目錄,會隨著OpenFileDialogSaveFileDialog等物件所確定的目錄而改變。“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 檔案如何配置:

方法最簡單直接,壞處是會影響全域性的 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 環境變數裡:

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

這樣就可以把 $(TargetDir)\DLLS 臨時新增到該工程所屬的系統 PATH 裡。

開發時可以根據專案的實際情況,靈活選用以上方法。