天天看點

Visual Studio 2008 中程式路徑配置 .

在調試 Visual Studio 2008 程式時,經常有一些動态連結庫(即 dll 檔案)需要加載到工程裡,這樣才能依賴第三方庫進行程式調試。

這些動态連結庫,往往都是測試版本或是開發中的版本,或者會有若幹個版本;這個時候,如果直接把 dll 所在目錄加到 PATH 裡,則會有潛在沖突的危險;如果直接拷貝到 Visual Studio 的目錄下,假如測試工程太多,每次有新版本的動态連結庫更新時,你需要更新若幹次,拷貝、粘貼苦不堪言。

在開發過程中,究竟怎樣來讓 Visual Studio 連結這些 lib 及 dll 檔案會比較好呢?

總體上來說,有幾種方法可以改變 Visual Studio 的環境變量設定:

這個方法最簡單,也最直接,但是壞處是會影響全局的 PATH 設定,尤其是你包含着大量測試用的 dll 時。

在 Visual Studio 全局設定裡,把 dll 所在目錄添加到 PATH 裡:

通過 Visual Studio 菜單 ==> 工具 ==> 選項 ==> 項目和解決方案 ==> VC++目錄,在下拉框裡選擇"可執行檔案",然後把 dll 所在路徑添加進去。

直接把所有 dll 拷貝到 Visual Studio 工程目錄下,或是拷貝到生成可執行檔案的檔案夾(預設情況下是 Debug 或 Release 目錄)下:

這個方法也很簡單,但是當你有若幹個工程時,你每次更新 SDK 及其 dll 檔案,你就要把所有的工程都更新,這個不符合檔案唯一性的工程性準則。

在調試程式時,讓 Visual Studio 幫你切換目前工作目錄到 dll 相應的目錄下:

在 Visual Studio ==> Project ==> Properties ==> Select Configuration ==> Configuration Properties ==> Debugging ==> Working directory 裡填上 dll 所在目錄,這樣當在調試程式時,Visual Studio 會把目前工作目錄切換到這個目錄下,進而會自動讀取本目錄下的 dll 檔案。

這個方法的優點很明顯,簡單!副作用也很明顯,在你切換了目前工作目錄後,你可能會找不到程式的配置檔案,在程式裡寫的諸如"./config.ini"全部都找不到了;另外,你要把所有的 dll 都放到這個工作目錄裡,否則一樣會提示說找不到 xxx.dll 的問題。

最後一個方法,也是我認為最好的一個方法,在 Visual Studio 工程屬性裡把一個目錄臨時添加到 PATH 環境變量裡:

大家可以根據項目的實際情況,靈活選用以上方法。

    在論壇中閑逛時,經常發現有朋友調試c/c++檔案流的代碼時,遇到檔案路徑的問題。下來我結合自己的經驗,一起探讨一下。

OS的檔案系統是一個樹狀結構,有目錄、檔案的概念。

windows系統的例子:

E:\myprograme\BBG\include\bbg_stl>tree

E:.

│  bbg_stl_config.h

├─bbg_list

│      bbg_list.h

├─bbg_alloc

│      bbg_allocpool.h

│      bbg_alloc_adapter.h

│      bbg_construct.h

│      bbg_simple_alloc.h

│      bbg_allocator.h

│      bbg_uninitialized.h

├─bbg_common

│      bbg_export.h

│      bbg_common.h

├─bbg_iterator

│      bbg_iterator.h

├─bbg_vector

│      bbg_vector.h

├─bbg_type

│      bbg_type_traits.h

└─bbg_algorithm

        bbg_algorithm.h 

linux 系統的例子

yes@yes-desktop:~/myprograme$ find /home/yes/myprograme -type f

/home/yes/myprograme/main

/home/yes/myprograme/test.c

/home/yes/myprograme/tt-v4.7.zip

/home/yes/myprograme/main.cpp

/home/yes/myprograme/test

yes@yes-desktop:~/myprograme$

“.” 一個“點”代表是目前目錄所在的路徑。對應着windows示例中的路徑是:“E:\myprograme\BBG\include\bbg_stl”

“..” 兩個“點”代表,相對于目前目錄的上一層目錄路徑。對應着windowss示例中的路徑是:“E:\myprograme\BBG\include” 

在UNIX家族、LINUX系統上,“.”和“..”的含義和windows是一樣的。這兩個路徑稱為相對路徑。

當然類似 “..\ \BBG\include” 也是相對路徑

在windows系統中,以盤符開頭的路徑叫做絕對路徑,比如:

“E:\myprograme\BBG\include”

而在linux系統中,“/”開頭的路徑叫做絕對路徑,比如:

“/home/yes/myprograme/test”

注意:“/”是UNIX家族、LINUX所有目錄的根目錄。

先以幾個例子開頭吧。

   //示例 1

    std::ofstream test_1("test_1.txt");

    test_1 << "hello world" << std::endl;

    test_1.close();   

    //示例 2

    std::ofstream test_2(".\\test_2.txt");

    test_2 << "hello world" << std::endl;

    test_2.close(); 

    //示例 3

    std::ofstream test_3("..\\test_3.txt");

    test_3 << "hello world" << std::endl;

    test_3.close(); 

    //示例 4

    std::ofstream test_4("d:\\test_4.txt");

    test_4 << "hello world" << std::endl;

    test_4.close(); 

說明:

1、上面示例1、示例2是一樣的,代表目前路徑下面的檔案test_1.txt 和test_2.txt。

2、示例3,是相對于目前路徑的上一層目錄下面的檔案test_3.txt。

3、示例4,是絕對路徑,就是d:盤下面的 test_4.txt。

4、在用VS調試的時候,目前路徑就是 VS工程檔案所在的路徑。

5、如果是沒有在調試狀态下運作,目前路徑就是“可執行檔案”(.exe)或者是“動态庫”(dll)所在的路徑。 

現在分别對示例代碼進行說明一下,

例如我上面的示例代碼儲存在下面檔案中:

D:\我的檔案\Visual Studio 2005\Projects\Test\Test\test\test2.cpp 

我的工程檔案所在的路徑如下:

D:\我的檔案\Visual Studio 2005\Projects\Test\Test\Test.vcproj 

那麼在用VS調試的時候,

示例1和示例2中的 test_1.txt  和 test_2.txt

就在D:\我的檔案\Visual Studio 2005\Projects\Test\Test目錄下面

示例3中的test_3.txt在D:\我的檔案\Visual Studio 2005\Projects\Test\目錄下面。

示例4中的test_4.txt在D:根目錄下面 

如果我們不是VS調試,直接執行可執行檔案,比如,我的可執行檔案的路徑是:

D:\我的檔案\Visual Studio 2005\Projects\Test\debug\ Test.exe 

那麼,

示例1和示例2中的test_1.txt 和test_2.txt

就在D:\我的檔案\Visual Studio 2005\Projects\Test\debug目錄下面

示例3中的test_3.txt在D:\我的檔案\Visual Studio 2005\Projects\Test目錄下面。

示例4中的test_4.txt在D:根目錄下面  

Windows路徑分隔符的說明: 

在之前不是說過,windows的路徑分隔符用“\”嗎?但是上面的最後三個示例,怎麼都用“\\”呢?

那是因為在字元串中,“\”是一個轉義字元表示,必須“\\”才能表示一個“\”字元。

繼續閱讀