Visual Studio中的環境變數(以Visual Studio 2013為例)

來源:互聯網
上載者:User

標籤:

前言

本文總結了Visual Studio中常見的環境變數及其在組織解決方案、工程中的作用。

註:本文使用的是Visual Studio 2013,由於作者主要從事C/C++開發,所以是以Visual C++的工作環境配置來描述。

什麼是vs的環境變數?

先看圖吧,圖中以貨幣符號$開頭 + 一對括弧,這樣進行引用的就是我所謂的環境變數,

圖中出現的幾個環境變數含義如下:

環境變數名 含義
$(SolutionDir) 解決方案目錄:即.sln檔案所在路徑
$(Configuration) 當前的編譯配置名稱,比如Debug,或Release
$(ProjectName) 當前項目名稱,圖中即為Game

在中文版的VS中,環境變數翻譯為“宏”,為了避免與C/C++語言中的宏(Macro)搞混,我在本文中把它叫做“vs環境變數”,簡稱環境變數。

環境變數有什麼用?

使用環境變數來組織工程目錄

vs作為一個IDE,其天職在於幫開發人員組織好工程,主要包括對工程中源檔案、庫檔案的組織。(本質上是提供一個可視化的操作介面,讓開發人員方便的定義編譯器和連結器的參數。)在使用vs來組織工程目錄時候最常用到的兩個目錄是:

  • 標頭檔包含目錄 (對應於編譯器命令的:-I 參數)

  • 庫檔案搜尋路徑 (對應於編譯器的:-l 參數)

vs中預設的標頭檔搜尋路徑是: 工程路徑 – 即,.vcxproj(不同版本的VC++尾碼名稱不同,如vs2010中尾碼為.vcproj) 檔案所在路徑。比如如下的目錄結構:

–Root/
—-Test.vcxproj
—-hello.cpp
—-hello.h
—-world.cpp
—-world.h
—-main.cpp
—-/subdir
——sub.h

在Root目錄包含了.vcxproj檔案,所以Root就是工程路徑,在vs中,這個目錄下面的.h檔案可以直接使用include包含進來, 比如在main.cpp中我可以寫:

#include "hello.h"#include "world.h"

但是對於sub.h,我們就不能直接寫#include "sub.h", 因為工程路徑下面不能搜尋到這個檔案,我要告訴編譯器這個檔案在哪裡,通常有以下兩種方法:

  • 寫成#include "subdir/sub.h"

  • 把subdir目錄加入到標頭檔搜尋路徑

Google的C++編程風格鼓勵第一種做法,好處是可以看到檔案相對完整的路徑,如果標頭檔搜尋路徑只有一個根目錄,那麼這個路徑就是檔案的相對於根目錄的實體路徑,方便定位檔案。

如果你覺得這樣寫很麻煩,並且路徑深度可能有多層,不同深度的路徑下又通常包含大量的檔案,那麼就可以選擇第二種做法,把每個子目錄統統加入到搜尋路徑中,這樣,就可以不用帶著路徑,直接#include "filename.h"就可以了。具體在VS中要怎麼合理的添加檔案包含目錄呢?由此,便引出了本節問題的答案:環境變數有什麼用?用途之一就是用來編寫標頭檔的搜尋路徑。

相信大家都知道如何在vs中添加一個標頭檔搜尋路徑這個常識,在此還是為初學者嘮叨一下具體做法:工程屬性 - 配置屬性 - C/C++ - 常規 - 編輯右側的”附加元件封裝含目錄”取值即可。

具體如所示:

點擊編輯之後,彈出如所示的編輯視窗:

在這裡可以建立、刪除包含路徑、調整包含順序。

點擊建立按鈕或者雙擊列表空白處即可添加一條包含路徑,在編輯新添加的路徑時,可以看到列表條目右側有一個瀏覽按鈕,

點擊按鈕可以從開啟檔案對話方塊裡選擇路徑,點擊確定後,會看到新添加的路徑名。雖然通過瀏覽來定位檔案夾比較容易,免去了自己編寫,但是你會發現,通過瀏覽添加的路徑是絕對路徑。

如果你是項目的唯一開發人員,並且僅僅使用這一台電腦來開發的話,那麼使用絕對路徑也沒什麼大問題。但是如果這個項目是個團隊協作項目,或者你需要在好幾台電腦之間切換,那麼這個包含路徑如果寫絕對路徑就不夠靈活了,如果別人的路徑配置或別的電腦的路徑配置不同,那麼要重新修改包含路徑。

一個比較合理的編寫包含路徑的方法是: 使用相對路徑。

相對誰呢? 相對項目根目錄或者解決方案根目錄。

為什麼呢?因為不管別人的電腦有什麼盤符、不管別人的項目放在何處,要包含的檔案都可以通過項目所在位置來計算出來。

當然前提是,項目開發人員們事先約定好被包含檔案相對於項目根目錄的位置。通常是放在項目根目錄(或者解決方案根目錄)的某個子目錄裡。

具體怎麼做呢?這就需要用到本文的主題:環境變數了。剛才提到的兩個相對目錄所對應的環境變數如下表所示:

目錄 對應的環境變數名稱
項目根目錄 $(ProjectDir)
解決方案根目錄 $(SolutionDir)

要解決剛才小例子中的問題,

–Root/
—-Test.vcxproj
—-hello.cpp
—-hello.h
—-world.cpp
—-world.h
—-main.cpp
—-/subdir
——sub.h

注意到.vcxproj所在目錄即項目根目錄,也就是$(ProjectDir)的取值等於Root/。所以要把subdir放在包含目錄裡,可以建立這樣一條包含路徑:

$(ProjectDir)subdir

這樣,在main.cpp裡就可以直接寫#include "sub.h"了。不管項目被拷貝到哪裡,都不用修改包含路徑。

上面就是環境變數使用的一個小例子。使用環境變數來編寫檔案包含路徑的好處是: 包含路徑獨立於工程所在的路徑,無論工程被移動到哪裡,都不需要重新修改包含路徑,因為使用環境變數來編寫的檔案包含路徑是一種相對路徑。

其它vs環境變數

如何查看所有的環境變數值呢?

有好多個地方都可以查看,比如剛才在添加包含目錄時候,彈出的視窗,注意其右下方,有個“宏”按鈕

點擊它就能看到所有的“宏” (即vs環境變數的值):

在上方的輸入框可以進行過濾。

下面的表格給出了常用的環境變數的含義:

環境變數名 含義
$(SolutionDir) 解決方案目錄:即.sln檔案所在路徑
$(ProjectDir) 項目根目錄:, 即.vcxproj檔案所在路徑
$(Configuration) 當前的編譯配置名稱,比如Debug,或Release
$(ProjectName) 當前項目名稱
$(SolutionName) 解決方案名稱
$(OutDir) 項目輸出檔案目錄
$(TargetName) 項目產生目標檔案, 通常和$(ProjectName)同名
$(TargetExt) 項目組建檔案尾碼名,如.exe, .lib具體取決於工程設定
$(ProjectExt) 工程檔案尾碼名,如.vcxproj

在下一篇文章中,講介紹如何合理使用這些環境變數來組織VC++工程。

進階思考
  • 如何定義、擴充VS的環境變數?

作者水平有限,對相關知識的理解和總結難免有錯誤,還望給予指正,非常感謝!

在這裡也能看到這篇文章:github部落格, CSDN部落格, 歡迎訪問

Visual Studio中的環境變數(以Visual Studio 2013為例)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.