Visual Studio 2008 、 Windows 環境變量介紹 和 如何在文件中引用環境變量

 Visual Studio 2008  和 Windows 環境變量對設置 相對路徑很重要,這樣便於代碼的移植,即使換一臺計算機,代碼不用更改配置,直接就能用。

可以在項目的“工具”“屬性頁”對話框中任何接受字符串的位置使用這些宏。這些宏不區分大小寫。 

關於如何自己定義環境變量詳見我的另一文章http://blog.csdn.net/jtop0/article/details/7574139

 

說明

$(RemoteMachine)

在“調試”屬性頁上設置爲 Remote Machine 屬性的值。有關更多信息,請參見更改用於 C/C++ 調試配置的項目設置

$(Configuration)

當前項目配置的名稱(例如“Debug”)。

$(Platform)

當前項目平臺的名稱(例如“Win32”)。

$(RootNameSpace)

包含應用程序的命名空間(如果有)。

$(IntDir)

爲中間文件指定的相對於項目目錄的目錄路徑。此路徑應具有尾部斜槓。這解析爲 Intermediate Directory 屬性的值。

$(OutDir)

輸出文件目錄的路徑,相對於項目目錄。此路徑應具有尾部斜槓。這解析爲 Output Directory 屬性的值。

$(DevEnvDir)

Visual Studio 2010 的安裝目錄(定義爲驅動器 + 路徑);包括尾部反斜槓“/”。

$(ProjectDir)

項目的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜槓“/”。

$(ProjectPath)

項目的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 文件擴展名)。

$(ProjectName)

項目的基名稱。

$(ProjectFileName)

項目的文件名(定義爲基本名稱 + 文件擴展名)。

$(ProjectExt)

項目的文件擴展名。它包括“.”在文件擴展名之前。

$(SolutionDir)

解決方案的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜槓“/”。

$(SolutionPath)

解決方案的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 文件擴展名)。

$(SolutionName)

解決方案的基名稱。

$(SolutionFileName)

解決方案的文件名(定義爲基本名稱 + 文件擴展名)。

$(SolutionExt)

解決方案的文件擴展名。它包括“.”在文件擴展名之前。

$(TargetDir)

生成的主輸出文件的目錄(定義形式:驅動器 + 路徑);包括尾部的反斜槓“/”。

$(TargetPath)

生成的主輸出文件的絕對路徑名(定義形式:驅動器 + 路徑 + 基本名稱 + 文件擴展名)。

$(TargetName)

生成的主輸出文件的基本名稱。

$(TargetFileName)

生成的主輸出文件的文件名(定義爲基本名稱 + 文件擴展名)。

$(TargetExt)

生成的主輸出文件的文件擴展名。它包括“.”在文件擴展名之前。

$(VSInstallDir)

安裝 Visual Studio 2010 的目錄。 
此屬性包含目標 Visual Studio 的版本,該版本可能與宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 進行生成時,$(VSInstallDir) 包含 Visual Studio 2008 安裝位置的路徑。

$(VCInstallDir)

安裝 Visual C++ 2010 的目錄。 
此屬性包含目標 Visual C++ 的版本,該版本可能與宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 進行生成時,$(VCInstallDir) 包含 Visual C++ 2008 安裝位置的路徑。

$(FrameworkDir)

安裝 .NET Framework 的目錄。

$(FrameworkVersion)

Visual Studio 使用的 .NET Framework 版本。與 $(FrameworkDir) 相結合,就是 Visual Studio 使用的 .NET Framework 版本的完整路徑。

$(FrameworkSDKDir)

安裝 .NET Framework 的目錄。.NET Framework 可能已作爲 Visual Studio 2010 的一部分安裝,也可能單獨安裝。

$(WebDeployPath)

從 Web 部署根到項目輸出所屬於的位置的相對路徑。返回與 RelativePath 相同的值。

$(WebDeployRoot)

指向 <localhost> 位置的絕對路徑。例如,c:/inetpub/wwwroot。

$(FxCopDir)

fxcop.cmd 文件的路徑。fxcop.cmd 文件不和所有的 Visual C++ 版本一起安裝。

 

 

出處:http://msdn.microsoft.com/zh-cn/library/c02as0cs.aspx

Visual Studio 2010
  >>Visual Studio
    >>Visual Studio 語言
      >>Visual C++
        >>Building a C/C++ Program
          >>在 Visual Studio 中生成 C++ 項目
            >>用於生成命令和屬性的宏

Visual Studio 2008 產生的臨時文件

http://www.cnblogs.com/owen-zhang/archive/2010/01/07/VisualStudioTemporaryFilesFolder.html

Visual Studio臨時文件存放的文件夾

 

在使用Visual Studio開發工具的過程中,Visual Studio會在如下文件夾(以VS2008和.NET Framework 2.0爲例)中生成一些臨時性的文件:
1、ReflectedSchemas:完整路徑爲“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas”。
2、ReflectedTypeLibs:完整路徑爲“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs”。
3、Temporary ASP.NET Files:完整路徑爲“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files“。

 

我的系統不是C盤,用戶名也不是Administrator,有批處理命令中用環境變量:
1、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas
2、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs
3、%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 

Windows 環境變量介紹

 http://hi.baidu.com/renol/blog/item/2b788458cc87cb8d810a185b.html

Windows系統路徑環境變量
%SystemDrive%        操作系統所在的分區號。如   C:

%SystemRoot%         操作系統根目錄。如 C:\WINDOWS

%windir%                   操作系統根目錄。如 C:\WINDOWS

%ALLUSERSPROFILE%           相當於   C:\Documents and Settings\All Users

%APPDATA%           相當於   C:\Documents and Settings\用戶目錄\Application Data

%ProgramFiles%      相當於   C:\Program Files

%CommonProgramFiles%          相當於   C:\Program Files\Common Files

%HOMEDRIVE%       操作系統所在的分區號。如:C:

%HOMEPATH%        相當於   \Documents and Settings\用戶目錄

%USERPROFILE%   相當於   C:\Documents and Settings\用戶目錄

%HOMEDRIVE%     = C:\                    當前啓動的系統的所在分區
%SystemRoot%      = C:\WINDOWS           當前啓動的系統的所在目錄
%windir%                 = %SystemRoot% = C:\WINDOWS                   當前啓動的系統的所在目錄
%USERPROFILE% = C:\Documents and Settings\sihochina           當前用戶數據變量
%HOMEPATH%       = C:\Documents and Settings\sihochina           當前用戶環境變量
%system%              = C:\WINDOWS\SYSTEM32   

%ALLUSERSPROFILE% : 列出所有用戶Profile文件位置。
%APPDATA% :   列出應用程序數據的默認存放位置。
%CD% :   列出當前目錄。
%CLIENTNAME% :   列出聯接到終端服務會話時客戶端的NETBIOS名。
%CMDCMDLINE% :   列出啓動當前cmd.exe所使用的命令行。
%CMDEXTVERSION% :   命令出當前命令處理程序擴展版本號。
%CommonProgramFiles% :   列出了常用文件的文件夾路徑。
%COMPUTERNAME% :   列出了計算機名。
%COMSPEC% :   列出了可執行命令外殼(命令處理程序)的路徑。
%DATE% :   列出當前日期。
%ERRORLEVEL% :   列出了最近使用的命令的錯誤代碼。
%HOMEDRIVE% :   列出與用戶主目錄所在的驅動器盤符。
%HOMEPATH% :   列出用戶主目錄的完整路徑。
%HOMESHARE% :   列出用戶共享主目錄的網絡路徑。
%LOGONSEVER% :   列出有效的當前登錄會話的域名控制器名。
%NUMBER_OF_PROCESSORS% :   列出了計算機安裝的處理器數。
%OS% :   列出操作系統的名字。(Windows XP 和 Windows 2000 列爲 Windows_NT.)
%Path% :   列出了可執行文件的搜索路徑。
%PATHEXT% :   列出操作系統認爲可被執行的文件擴展名。
%PROCESSOR_ARCHITECTURE% :   列出了處理器的芯片架構。
%PROCESSOR_IDENTFIER% :   列出了處理器的描述。
%PROCESSOR_LEVEL% :   列出了計算機的處理器的型號。
%PROCESSOR_REVISION% :   列出了處理器的修訂號。
%ProgramFiles% :   列出了Program Files文件夾的路徑。
%PROMPT% :   列出了當前命令解釋器的命令提示設置。
%RANDOM% :   列出界於0 和 32767之間的隨機十進制數。
%SESSIONNAME% :   列出連接到終端服務會話時的連接和會話名。
%SYSTEMDRIVE% :   列出了Windows啓動目錄所在驅動器。
%SYSTEMROOT% :   列出了Windows啓動目錄的位置。
%TEMP% and %TMP% :   列出了當前登錄的用戶可用應用程序的默認臨時目錄。
%TIME% :   列出當前時間。
%USERDOMAIN% :   列出了包含用戶帳號的域的名字。
%USERNAME% :   列出當前登錄的用戶的名字。
%USERPROFILE% :   列出當前用戶Profile文件位置。
%WINDIR% :   列出操作系統目錄的位置。

變量 類型 描述
%ALLUSERSPROFILE% 本地 返回“所有用戶”配置文件的位置。
%APPDATA% 本地 返回默認情況下應用程序存儲數據的位置。
%CD% 本地 返回當前目錄字符串。
%CMDCMDLINE% 本地 返回用來啓動當前的 Cmd.exe 的準確命令行。
%CMDEXTVERSION% 系統 返回當前的“命令處理程序擴展”的版本號。
%COMPUTERNAME%   系統 返回計算機的名稱。
%COMSPEC%   系統 返回命令行解釋器可執行程序的準確路徑。
%DATE%   系統 返回當前日期。使用與 date /t 命令相同的格式。由 Cmd.exe 生成。有關 date 命令的詳細信息,請參閱 Date。
%ERRORLEVEL%   系統 返回上一條命令的錯誤代碼。通常用非零值表示錯誤。
%HOMEDRIVE%   系統 返回連接到用戶主目錄的本地工作站驅動器號。基於主目錄值而設置。用戶主目錄是在“本地用戶和組”中指定的。
%HOMEPATH%   系統 返回用戶主目錄的完整路徑。基於主目錄值而設置。用戶主目錄是在“本地用戶和組”中指定的。
%HOMESHARE%   系統 返回用戶的共享主目錄的網絡路徑。基於主目錄值而設置。用戶主目錄是在“本地用戶和組”中指定的。
%LOGONSERVER%   本地 返回驗證當前登錄會話的域控制器的名稱。
%NUMBER_OF_PROCESSORS%   系統 指定安裝在計算機上的處理器的數目。
%OS%   系統 返回操作系統名稱。Windows 2000 顯示其操作系統爲 Windows_NT。
%PATH% 系統 指定可執行文件的搜索路徑。
%PATHEXT% 系統 返回操作系統認爲可執行的文件擴展名的列表。
%PROCESSOR_ARCHITECTURE%   系統 返回處理器的芯片體系結構。值:x86 或 IA64(基於 Itanium)。
%PROCESSOR_IDENTFIER% 系統 返回處理器說明。
%PROCESSOR_LEVEL%   系統 返回計算機上安裝的處理器的型號。
%PROCESSOR_REVISION% 系統 返回處理器的版本號。
%PROMPT% 本地 返回當前解釋程序的命令提示符設置。由 Cmd.exe 生成。
%RANDOM% 系統 返回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系統 返回包含 Windows server operating system 根目錄(即系統根目錄)的驅動器。
%SYSTEMROOT%   系統 返回 Windows server operating system 根目錄的位置。
%TEMP% 和 %TMP% 系統和用戶 返回對當前登錄用戶可用的應用程序所使用的默認臨時目錄。有些應用程序需要 TEMP,而其他應用程序則需要 TMP。
%TIME% 系統 返回當前時間。使用與 time /t 命令相同的格式。由 Cmd.exe 生成。有關 time 命令的詳細信息,請參閱 Time。
%USERDOMAIN% 本地 返回包含用戶帳戶的域的名稱。
%USERNAME% 本地 返回當前登錄的用戶的名稱。
%USERPROFILE% 本地 返回當前用戶的配置文件的位置。
%WINDIR% 系統 返回操作系統目錄的位置。

%temp%        = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp                                                                              當前用戶TEMP緩存變量
------------------------------------------------------------------------
例如:%windir%\drives 的實際路徑就是 C:\WINDOWS\drives 目錄。
          所謂變量,就是指一個在不同環境中會有相對不同的值的、但在所有環境中都有相同約定的含義的量。
          這些變量,可以在開始菜單-運行中輸入,如輸入%SystemRoot% ,系統會直接打開 C:\WINDOWS 目錄。
如果你當前的系統是裝在D盤的2000的話,上邊這個變量的執行結果就是打開 D:\WINNT 目錄了。

如何在cmd命令行中查看、修改、刪除與添加,設置環境變量

首先明確一點: 所有的在cmd命令行下對環境變量的修改只對當前窗口有效,不是永久性的修改。也就是說當關閉此cmd命令行窗口後,將不再起作用。
永久性修改環境變量的方法有兩種:一種是直接修改註冊表(此種方法目前沒試驗過),另一種是通過我的電腦-〉屬性-高級,來設置系統的環境變量(查看詳細)。

其次,明確一下環境變量的作用。

它是操作系統用來指定運行環境的一些參數。比如臨時文件夾位置和系統文件夾位置等。當你運行某些程序時,除了在當前文件夾中尋找外,還會到這些環境變量中去查找,比如“Path”就是一個變量,裏面存儲了一些常用的命令所存放的目錄路徑。

第三:什麼情況下進行設置?

當啓動cmd命令行窗口調用某一命令的時候,經常會出現“xxx不是內部或外部命令,也不是可運行的程序或批處理文件”,如果你的拼寫沒有錯誤,同時計算機中確實存在這個程序,那麼出現這個提示就是你的path變量沒有設置正確,因爲你的path路徑,也就是默認路徑裏沒有你的程序,同時你有沒有給出你程序的絕對路徑(因爲你只是輸入了命令或程序的名稱而已),這是操作系統不知道去哪兒找你的程序,就會提示這個問題。

第四:如何修改?

1、查看當前所有可用的環境變量:輸入 set 即可查看。

2、查看某個環境變量:輸入 “set 變量名”即可,比如想查看path變量的值,即輸入 set path

3、修改環境變量 :輸入 “set 變量名=變量內容”即可,比如將path設置爲“d:\nmake.exe”,只要輸入set path="d:\nmake.exe"。注意,此修改環境變量是指用現在的內容去覆蓋以前的內容,並不是追加。比如當我設置了上面的path路徑之後,如果我再重新輸入set path="c",再次查看path路徑的時候,其值爲“c:”,而不是“d:\nmake.exe”;“c”。

4、設置爲空:如果想將某一變量設置爲空,輸入“set 變量名= ”即可。如“set path=” 那麼查看path的時候就爲空。注意,上面已經說了,只在當前命令行窗口起作用。因此查看path的時候不要去右擊“我的電腦”——“屬性”........

5、給變量追加內容(不同於3,那個是覆蓋):輸入“set 變量名=%變量名%;變量內容”。如,爲path添加一個新的路徑,輸入“ set path=%path%;d:\nmake.exe”即可將d:\nmake.exe添加到path中,再次執行"set path=%path%;c:",那麼,使用set path語句來查看的時候,將會有:d:\nmake.exe;c:,而不是像第3步中的只有c:。


附錄:下面貼上一些常用的環境變量及作用

%ALLUSERSPROFILE% 局部 返回所有“用戶配置文件”的位置。

%APPDATA% 局部 返回默認情況下應用程序存儲數據的位置。

%CD% 局部 返回當前目錄字符串。

%CMDCMDLINE% 局部 返回用來啓動當前的 Cmd.exe 的準確命令行。

%CMDEXTVERSION% 系統 返回當前的“命令處理程序擴展”的版本號。

%COMPUTERNAME% 系統 返回計算機的名稱。

%COMSPEC% 系統 返回命令行解釋器可執行程序的準確路徑。

%DATE% 系統 返回當前日期。使用與 date /t 命令相同的格式。由 Cmd.exe 生成。有關 date 命令的詳細信息,請參閱Date。

%ERRORLEVEL% 系統 返回最近使用過的命令的錯誤代碼。通常用非零值表示錯誤。

%HOMEDRIVE% 系統 返回連接到用戶主目錄的本地工作站驅動器號。基於主目錄值的設置。用戶主目錄是在“本地用戶和組”中指定的。

%HOMEPATH% 系統 返回用戶主目錄的完整路徑。基於主目錄值的設置。用戶主目錄是在“本地用戶和組”中指定的。

本文引用地址:http://blog.sciencenet.cn/blog-51026-566742.html

我也一直不明白,以下兩篇文章就能說明問題.
--------------------------------------------------
標題: 怎樣用腳本來設置環境變量 
我想編一個腳本程序,用來對一組環境變量進行設置或取消
但由於腳本程序對變量的設置在退出腳本後就消失了,有沒有間接辦法能夠實現這個功能? 
你說的是 export ?
在腳本中使用export, 好像只在腳本中有效,退出這個腳本,設置的變量就沒有了
在你的腳本中做設置
在~/.profile 或 ~/.bashrc 等 用source運行    
我試了一下,
用source可以運行普通的shell腳本,也可達到設置環境變量的目的,
想問一下source是什麼命令?用man和info沒有查到說明  
source 是 bash 的內嵌命令,
man bash
/source filename \[arguments\]
Thank u
source filename
or
代碼:
. filename
source 是 bash 的內嵌命令,
man bash
/source filename \[arguments\]
source好像不一定是bash的‘內嵌命令’
忘了是哪個發行版了
source是外部命令
$ type source
source is a shell builtin
哪個BT的發行版把 source 外部化了?忽忽。。
--------------------------------------------------
我自己也是一個菜鳥,接觸linux沒有多久,最近在學習BASH的export命令時碰到了一個難道(書
上說export是將自定義變量變成系統環境變量):我在一個腳本文件中定義一個了變量,然後expor
t變量,按照我自己的想法,執行完這個腳本後,在提示符下一定可以用echo顯示出它的值,可結
果卻不是這樣,腳本執行完後用set根本看不到有這個變量存在。爲什麼呢?我百思不得其解,最後
將問題貼出來,一位前輩告訴我說用source+腳本文件就可以了,我試了一下果然可以,但一個新
的問題又出來了。我將腳本中export命令刪除後,用source一樣可以。那這個export好像沒有什麼
用呀。 
在經過多次嘗試後發現了一些東西,是我自己猜的,如果有什麼不對的地方,請指正,謝謝。 
執行一個腳本時,會先開啓一個子 shell環境(不知道執行其它程序是不是這樣),然後將父shell
中的所有系統環境變量複製過來,這個腳本中的語句就在子shell中執行。(也就是說父shell的環境
變量在子shell中可以調用,但反過來就不行,如果在子shell中定義了環境變量,只對該shell或者它
的子shell有效,當該子shell結束時,也可以理解爲腳本執行完時,變量消失。)爲了證明這一點,
請看腳本內容: 
test='value' 
export test 
這樣的腳本執行完後,test實際上是不存在的。接着看下面的: 
test='value' 
export test 
bash 
這裏在腳本最後一行再開一個子shell,該shell應該是腳本文件所在shell的子shell,這個腳本執行完
後,是可以看到test這個變量的,因爲現在是處於它的子shell中,當用exit退出子shell後,test變量
消失。 
如果用source對腳本進行執行時,<b>如果不加export,就不會在子shell中看到這個變量</b>,因
爲它還不是一個系統環境變量呀,如腳本內容是: 
test='value' 
用 source執行後,在shell下是能看到這個變量,但再執行bash開一個子shell時,test是不會被複
Page 1 of  怎樣用腳本來設置環境變量
2012-5-16 http://www.360doc.com/content/12/0211/14/6828497_185770493.shtml制到子shell中的,因爲執行腳本文件其實也是在一個子shell中運行,所以我再建另一個腳本文件執
行時,是不會輸入任何東西的,內容如:echo $test。所以這點特別注意了,明明在提示符下可以
用echo $test輸出變量值,爲什麼把它放進腳本文件就不行了呢? 
所以得出的結論是:1、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退
出;2、一個shell中的系統環境變量纔會被複制到子shell 中(用export定義的變量);3、一個shell
中的系統環境變量只對該shell或者它的子shell有效,該shell結束時變量消失(並不能返回到父shell
中)。3、不用export定義的變量只對該shell有效,對子shell也是無效的。 
後來根據版主的提示,整理了一下貼子:爲什麼一個腳本直接執行和用source執行不一行呢?這也
是我自己碰到的一個問題。manual原文是這樣的:Read and execute commands from filename in
the current shell environment and return the exit status of the last command executed from filena
me.明白了爲什麼不一樣了吧?直接執行一個腳本文件是在一個子shell中運行的,而source則是在
當前shell環境中運行的。根據前面的內容,你也已經明白其中的道理了吧。 
困擾了我幾天的問題終於可以圓滿的解決了。
--------------------------------------------------
 
不過還有一個問題,聽說子shell的環境變量與父shell的也不完全一樣,究竟差別是什麼?
source命令:
source命令也稱爲“點命令”,也就是一個點符號(.)。source命令通常用於重新執行剛修改的初
始化文件,使之立即生效,而不必註銷並重新登錄。
用法: 
source filename 或 . filename
source命令除了上述的用途之外,還有一個另外一個用途。在對編譯系統核心時常常需要輸入一長
串的命令,如:
make mrproper
make menuconfig
make dep
make clean
make bzImage
…………
如果把這些命令做成一個文件,讓它自動順序執行,對於需要多次反覆編譯系統核心的用戶來說會
很方便,而用source命令就可以做到這一點,它的作用就是把一個文件的內容當成shell來執行,先
在linux的源代碼目錄下(如/usr/src/linux-2.4.20)建立一個文件,如 make_command,在其中輸
入一下內容:
make mrproper &&
make menuconfig &&
make dep &&
make clean &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/vmlinuz_new &&
cp System.map /boot &&
vi /etc/lilo.conf &&
lilo -v
文件建立好之後,每次編譯核心的時候,只需要在/usr/src/linux-2.4.20下輸入:
source make_command
即可,如果你用的不是lilo來引導系統,可以把最後兩行去掉,配置自己的引導程序來引導內核。
順便補充一點,&&命令表示順序執行由它連接的命令,但是隻有它之前的命令成功執行完成了之後
纔可以繼續執行它後面的命令。
==============================================================
1、引言
Page 2 of  怎樣用腳本來設置環境變量
2012-5-16 http://www.360doc.com/content/12/0211/14/6828497_185770493.shtml    在linux系統下,如果你下載並安裝了應用程序,很有可能在鍵入它的名稱時出現“comman
d not found”的提示內容。如果每次都到安裝目標文件夾內,找到可執行文件來進行操作就太繁瑣
了。這涉及到環境變量PATH的設置問題,而PATH的設置也是在linux下定製環境變量的一個組成
部分。本文基於RedHat 9.0,詳細講解了環境變量定製的問題。
2、變量簡介
Linux是一個多用戶的操作系統。每個用戶登錄系統後,都會有一個專用的運行環境。通常每
個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境變量的定義。用戶可以對自己的
運行環境進行定製,其方法就是修改相應的系統環境變量。
3、定製環境變量
    環境變量是和Shell緊密相關的,用戶登錄系統後就啓動了一個Shell。對於Linux來說一般是
bash,但也可以重新設定或切換到其它的 Shell。根據發行版本的情況,bash有兩個基本的系統級
配置文件:/etc/bashrc和/etc/profile。這些配置文件包含兩組不同的變量:shell變量和環境變量。
前者只是在特定的shell中固定(如bash),後者在不同shell中固定。很明顯,shell變量是局部的,
而環境變量是全局的。環境變量是通過Shell命令來設置的,設置好的環境變量又可以被所有當前用
戶所運行的程序所使用。對於bash這個Shell程序來說,可以通過變量名來訪問相應的環境變量,
通過export來設置環境變量。下面通過幾個實例來說明。

3.1 使用命令echo顯示環境變量
 
#本例使用echo顯示常見的變量HOME
$ echo $HOME   
/home/lqm
 
3.2 設置一個新的環境變量 
 
$ export HELLO=”Hello!”
$ echo $HELLO
Hello!
 
3.3 使用env命令顯示所有的環境變量
 
$ env
SSH_AGENT_PID=1875

HOSTNAME=lqm
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
……
 
3.4  使用set命令顯示所有本地定義的Shell變量
 
$ set
BASH=/bin/bash
……
 
3.5  使用unset命令來清除環境變量
 
$ export TEST=”test”      #增加一個環境變量TEST
$ env | grep TEST           #此命令有輸出,證明環境變量TEST已經存在了
TEST=test
$ unset $TEST                #刪除環境變量TEST
$ env | grep TEST           #此命令無輸出,證明環境變量TEST已經存在了
 
3.6  使用readonly命令設置只讀變量 
如果使用了readonly命令的話,變量就不可以被修改或清除了。示例如下:
 
$ export TEST="Test..."                                        #增加一個環境變量TEST
$ readonly TEST                                                   #將環境變量TEST設爲只讀
$ unset TEST                                                        #會發現此變量不能被刪除
-bash: unset: TEST: cannot unset: readonly variable

$ TEST="New"                                                     #會發現此變量不能被修改
-bash: TEST: readonly variable
 
3.7  用C程序來訪問和設置環境變量
對於C程序的用戶來說,可以使用下列三個函數來設置或訪問一個環境變量。
getenv()  訪問一個環境變量。輸入參數是需要訪問的變量名字,返回值是一個字符串。如果所
訪問的環境變量不存在,則會返回NULL。
setenv()  在程序裏面設置某個環境變量的函數。
unsetenv()  清除某個特定的環境變量的函數。
另外,還有一個指針變量environ,它指向的是包含所有的環境變量的一個列表。下面的程序可
以打印出當前運行環境裏面的所有環境變量:
 
#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf ("%s \n ",*var);
return 0;
}
 
3.8      通過修改環境變量定義文件來修改環境變量
需要注意的是,一般情況下,這僅僅對於普通用戶適用,避免修改根用戶的環境定義文件,因
爲那樣可能會造成潛在的危險。
 
$cd                                     #到用戶根目錄下
$ls -a                                  #查看所有文件,包含隱藏的文件
$vi .bash_profile                 #修改環境變量定義文件

 
然後編輯你的PATH聲明,其格式爲:
PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
你可以自己加上指定的路徑,中間用冒號隔開。環境變量更改後,在用戶下次登陸時生效,如
果想立刻生效,則可執行下面的語句:$source .bash_profile
需要注意的是,最好不要把當前路徑”./”放到PATH裏,這樣可能會受到意想不到的攻擊。完
成後,可以通過$ echo $PATH查看當前的搜索路徑。這樣定製後,就可以避免頻繁的啓動位於shel
l搜索的路徑之外的程序了。
4  總結
    通過以上的設置,你可以有一個比較方便有效的環境來提高你的
http://www.360doc.com/content/12/0211/14/6828497_185770493.shtml

1.2. 環境變量
1.2.1. 如何從程序中獲得/設置環境變量?

獲得一個環境變量可以通過調用‘getenv()’函數完成。

     #include <stdlib.h>

     char *getenv(const char *name);
      

設置一個環境變量可以通過調用‘putenv()’函數完成。

     #include <stdlib.h>

     int putenv(char *string);
      

變量string應該遵守"name=value"的格式。已經傳遞給putenv函數的字符串*不*能夠被釋放或變成無效,因爲一個指向它的指針將由‘putenv()’保存。這意味着它必須是在靜態數據區中或是從堆(heap)分配的。如果這個環境變量被另一個‘putenv()’的調用重新定義或刪除,上述字符串可以被釋放。

/**************************譯者增加***********************************

因爲putenv()有這樣的侷限,在使用中經常會導致一些錯誤,GNU libc 中還包括了兩個BSD風格的函數:

#include <stdlib.h>

int setenv(const char *name, const char *value, int replace);
void unsetenv(const char *name);
      

setenv()/unsetenv()函數可以完成所有putenv()能做的事。setenv() 可以不受指針限制地向環境變量中添加新值,但傳入參數不能爲空(NULL)。當replace爲0時,如果環境變量中已經有了name項,函數什麼也不做(保留原項),否則原項被覆蓋。 unsetenv()是用來把name項從環境變量中刪除。注意:這兩個函數只存在在BSD和GNU 庫中,其他如SunOS系統中不包括它們,因此將會帶來一些兼容問題。我們可以用 getenv()/putenv()來實現:

int setenv(const char *name,  const char *value, int replace)
{
   char *envstr;

   if (name == NULL || value == NULL)
      return 1;
   if (getenv(name) !=NULL)
     {
        envstr = (char *) malloc(strlen(name) + strlen(value) + 2);
        sprintf (envstr, "%s=%s", name, value);
        if (putenv(envstr));
           return 1;
     }
   return 0;
} 
      

**************************譯者增加***********************************/

記住環境變量是被繼承的;每一個進程有一個不同的環境變量表拷貝(譯者注:從core文件中我們可以看出這一點)。結果是,你不能從一個其他進程改變當前進程的環境變量,比如shell進程。

假設你想得到環境變量‘TERM’的值,你需要使用下面的程序:

     char *envvar;

     envvar=getenv("TERM");

     printf("The value for the environment variable TERM is ");
     if(envvar)
     {
         printf("%s\n",envvar);
     }
     else
     {
         printf("not set.\n");
     }
      

現在假設你想創建一個新的環境變量,變量名爲‘MYVAR’,值爲‘MYVAL’。以下是你將怎樣做:

     static char envbuf[256];

     sprintf(envbuf,"MYVAR=%s","MYVAL");

     if(putenv(envbuf))
     {
         printf("Sorry, putenv() couldn't find the memory for %s\n",envbuf);
         /* Might exit() or something here if you can't live without it */
     }
      

1.2.2. 我怎樣讀取整個環境變量表?

如果你不知道確切你想要的環境變量的名字,那麼‘getenv()’函數不是很有用。在這種情況下,你必須更深入瞭解環境變量表的存儲方式。

全局變量,‘char **envrion’,包含指向環境字符串指針數組的指針,每一個字符串的形式爲‘“NAME=value”’(譯者注:和putenv()中的“string”的格式相同)。這個數組以一個‘空’(NULL)指針標記結束。這裏是一個打印當前環境變量列表的小程序(類似‘printenv’)。

     #include <stdio.h>

     extern char **environ;

     int main()
     {
         char **ep = environ;
         char *p;
         while ((p = *ep++))
             printf("%s\n", p);
         return 0;
     }
      

一般情況下,‘envrion’變量作爲可選的第三個參數傳遞給‘main()’;就是說,上面的程序可以寫成:

     #include <stdio.h>

     int main(int argc, char **argv, char **envp)
     {
         char *p;
         while ((p = *envp++))
             printf("%s\n", p);
         return 0;
     }
      

雖然這種方法被廣泛的操縱系統所支持(譯者注:包括DOS),這種方法事實上並沒有被POSIX(譯者注:POSIX: Portable Operating System Interace)標準所定義。(一般的,它也比較沒用)

http://www.linuxforum.net/books/upfaq/x124.htm

怎樣檢索環境變量(environment variables)的值?


ANSI C標準提供了一個名爲getenv()的函數來完成這項任務。getenv()函數很簡單一把指向要查找的環境串的指針傳遞給它,它就返回一個指向該變量值的指針。下面的程序說明了如何從C中獲得環境變量PATH的值:
# include <stdlib. h>
main(int argc, char *  *  argv)
{
    char envValue[l29];             / *  buffer to store PATH * /
    char *  envPtr = envValue ;     / *  pointer to this buffer  * /
    envPtr = getenv("PATH");        /*  get the PATH */
    printf ("PATH= %s\n" , envPtr) ;   / * print the PATH * /
}
如果你編譯並運行了這個程序,你就會看到與在DOS提示符下輸入PATH命令完全相同的結果。事實上,你可以用getenv()檢索AUTOEXEC.BAT文件中的或者系統引導後在DOS揭示符下輸入的所有環境變量的值。

這裏有一個小技巧。當運行Windows時,Windows設置了一個名爲WINDIR的新的環境變量,它包含了Windows目錄的路徑全名。下面這段簡單的程序用來檢索這個串:
# include <stdlib. h>
main(int argc, char * *  argv)
{
    char envValue[l29];
    char *  envPtr = envValue ;
   envPtr = getenv("windir");
    / * print the Windows directory * /
    printf("The Windows Directory is  %s\n" ,  envPtr);
}
這個程序還可以用來判斷當前是否正在運行Windows,以及DOS程序是否運行在一個DOS shell下,而不是運行在“真正的"DOS下。注意,程序中的windir字符串是小寫——這一點很重要,因爲它對大小寫是敏感的。如果你使用WINDIR,getenv()就會返回一個NULL串(表示變量未找到錯誤)。

用一putenv()函數也可以設置環境變量。但要注意,該函數不是一個ANSI標準函數,在某些編譯程序中它可能不以這個名字出現,或者根本就不存在。你可以用一putenv()函數做許多事情。實際上,在上面那個例子中,Windows正是用這個函數創建了windir環境變量。

http://see.xidian.edu.cn/cpp/html/1641.html

實例:在VC2008中設置運行臨時環境變量

In VS 2008 and VS 2005 at least, you can specify changes to environment variables in the project settings.

Open your project. Go to Project>Properties... Under Configuration Properties>Debugging, edit the 'Environment' value to set environment variables.

For example, if you want to add the directory "c:\foo\bin" to the path when debugging your app, set the 'Environment' value to"PATH=%PATH%;c:\foo\bin".

Here's a screenshot of the setting s dialog:


http://www.404qa.com/q-182.html

 參考網址:

http://blog.csdn.net/lyl8470/article/details/6111765      visual studio 中的環境變量 

http://tangzhongxin.blog.163.com/blog/static/89219612011888433810/ Visual Studio 2008 產生的臨時文件,和 Windows 環境變量介紹   

http://www.cnblogs.com/waterlin/archive/2011/10/31/2230341.html  Visual Studio 2008 環境變量的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章