VS2008(2010)開發C++

命令行執行vc的用法參見:

http://blog.csdn.net/memory_xj/archive/2008/10/27/3156781.aspx

VS 2008 找不到“windows.h”之謎 

今天要運行一個簡單的C++程序,如下:

//C++ code 讓任務管理器的CPU使用產生一條正弦曲線圖

#include 〈Windows.h〉

#include “stdlib.h“

#include “math.h“

#include 〈stdio.h〉

const double SPLIT = 0.01;

const int COUNT = 200;

const double PI = 3.14159265;

const int INTERVAL = 300;

int main(int argc, char* argv[])

{

DWORD busySpan[COUNT]; //array of busy times

long int idleSpan[COUNT]; //array of idle times

int half = INTERVAL / 2;

double radian = 0.0;

for(int i = 0; i 〈 COUNT; i++)

{

busySpan[i] = (long int)(half + (sin(PI * radian) * half));

idleSpan[i] = INTERVAL - busySpan[i];

radian += SPLIT;

}

long int startTime = 0;

int j = 0;

while (true)

{

j = j % COUNT;

startTime = GetTickCount();

while ((GetTickCount() - startTime) 〈= busySpan[j]) ;

Sleep(idleSpan[j]);

j++;

}

return 0;

}

由於比較簡單,就直接用editplus編輯成task.cpp文件,想在控制檯中用cl.exe直接編譯一下運行。

1、將cl.exe的path環境設置。

我安裝的是VS2008 Team版。所出將“C:\Program Files\Microsoft Visual Studio 9.0\VC\bin”添加至PATH環境變量中。具體設置:我的電腦-〉屬性-〉高級-〉環境變量,在出現的環境變量對話框中,選擇path變量,編輯即可。

2、如果這時你運行cl task.cpp,會出現“沒有找到mspdb80.dll”的錯誤,所出要同時將mspdb80.dll的路徑加入path環境變量。路徑爲:“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE”。

3、要在控制檯中編譯Win32程序,當然還得手動需設置include、lib環境變量(詳細見http://blog.csdn.net/memory_xj/archive/2008/10/27/3156887.aspx),這很有點複雜,還好VS2008爲我們將這些設置命令編成了vsvar32.bat文件,我們只需執行即可。

在這裏,我的噩夢來了。根據很多資料,包括著名的jjhou先生在《深入淺出MFC》中都指出應執行:C:\Program Files\Microsoft Visual Studio 9.0\VC\bin目錄下的vsvars32.bat。如果程序中沒有#include 〈windows.h〉這一切是會很正常的。執行cl task.cpp出現了“fatal error C1034:windows.h:不包括路徑集”的錯誤。從這裏我就開始了很長一段時間的解決之路。

4、首先是搜索,看看這個windows.h究竟藏在什麼地方。發現在“C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include”中有一個,但這個目錄和VS2008有什麼關係呢?先不管,在include環境變量中加入這個目錄,再cl編譯一下,唉,又出現在這個windows.h中include的另一個頭文件找不到了。當時,我以爲這個目錄是SDK的一個目錄,應該和VS2008沒有任何關係,就不想在這上面花功夫了,後來發現是錯了,其實VS2008中的$(WindowsSdkDir)環境變量就是對應這個目錄。如果根據錯誤提示,在include環境變量中一直將所需的目錄添加上的話,可能也會很快解決windows.h的問題。

5、接着,腦子裏竟冒出重裝VS2008的想法,不過很快否定了,VS2008太大了。必竟是在控制檯中編譯,是不是SDK的問題呢?以下是找到的資料和我自己的理解:

SDK即software develope kit(軟件開發工具包),它包含了進行Windows軟件開發的文檔和API函數的輸入庫、頭文件(因爲API在動態鏈接庫中,這些動態鏈接庫是系統的組成部分因此不用再提供,而輸入庫和頭文件則必須,這樣才能在你的程序中使用API函數)。早期SDK是一個單獨發放的包,現在在Visual C++和其他一些開發環境中已經包含了它。儘管很多同道說,SDK和VC(VS2005、VS2008等)是兩套系統,但我傾向於認爲SDK之於VS2008就象JAVA中JDK之於eclipse等開發工具一樣,是開發工具的基礎,

(1)什麼是Windows SDK?

Windows SDK是用來支持32位和64位Windows平臺以及.NET框架編程模型的開發包。Windows SDK這個名字從Windows Vista開始使用,它包含以前Platform SDK中的所有內容,同時包含.NET框架的內容。

(2)什麼是Platform SDK?

Platform SDK(也簡寫作PSDK)是在Windows Vista之前的Windows操作系統開發包。PSDK不包含任何.NET框架編程模型的內容。現在,Windows SDK已經取代了PSDK。PSDK不會再有更新版本發佈,儘管一些PSDK仍然可以在微軟的網站上下載到.

(3)Windows SDK與Platform SDK的區別?

Windows SDK已經取代了Platform SDK。Platform SDK已經結束它的歷史使命,不會再有更新。你可能因爲某些原因還是要去使用老的Platform SDK。比如,你還在使用VC 6進行開發,那你就要去用2003年2月份發佈的Windows Server 2003 PSDK,這是最後一個對VC 6開發提供全面支持的SDK。

6、想着,我就準備下載一個SDK安裝一下試試了。從http://download.csdn.net/source/724093網址下載SDK的安裝工具,安裝,自動下載SDK並安裝,成功。

安裝目錄爲C:\Program Files\Microsoft Platform SDK,windows.h赫然就在include目錄中,高興,在inclue環境變量中加入C:\Program Files\Microsoft Platform SDK\Include\crt(是windows.h中一個包含文件所需),C:\Program Files\Microsoft Platform SDK\Include在SDK安裝時,選擇設置環境變量就已加入到include中了。如果這時,cl編譯,還會出現一個某某lib打不開的錯誤(呵,記不住名稱了),不要緊,還是用搜索***,會發現好幾個,不過Platform SDK中沒有,倒是VS2008中有一個,就將這個目錄加入到lib環境變量中吧。cl編譯一下,成功了!!

在控制檯中的環境變量的查看,添加可以參考文章:http://blog.csdn.net/memory_xj/archive/2008/10/27/3157187.aspx

7、至此,用Platform SDK編譯成功了。但是想想也不甘心哪,必竟VS2008這樣強橫的系統,在控制檯中竟搞不定windows.h的包含,沒有天理哪!腦袋靈光一閃,在VS2008 IDE中,新建一個控制檯Win32解決方案,選擇空文件(沒有預編譯等),在源文件中新建一CPP文件,將代碼拷貝至文件中。爲了保險起見,我將include、lib環境變量中屬於Platform SDK的刪除。再生成解決方案,沒有出現找不到windows.h的問題,成功!說明,VS2008完全有能力搞惦的。問題可能出現在我不知道怎樣設置環境上。

8、看VS的環境變量:工具-〉選項-〉項目和解決方案-〉VC目錄設置-〉顯示以下內容的目錄(選包含文件)。有好幾個路徑目錄,還有VS定義的環境變量,如$(WindowsSdkDir),這個環境變量指向哪兒呢?在運行-〉cmd命令-〉set命令,完全沒有這個$(WindowsSdkDir)環境變量哪,在哪兒看呢?

9、$(WindowsSdkDir)環境變量的內容要在VS2008的控制檯中看,(VS2008還有專有控制檯?沒聽說過),找找吧。在工具菜單中有一個“Visual studio 2005 command prompt”,可能這是這個,點擊運行,嘿,可真出現一個控制檯,用SET命令,發現$(WindowsSdkDir)就是指向哪個“C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include”,等一等!!這個專用控制檯在運行開始竟然執行了一個批處理文件,C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat,在C:\Program Files\Microsoft Visual Studio 9.0\VC\bin不是也有一個vsvars32.bat。難道此bat非彼bat?

10、至此,心裏明白離真相大白不遠了。莫非是在cl編譯執行C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\目錄中的vsvars32.bat。興奮得小心抖抖,關掉VS2008 IDE,打開控制檯,先執行C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat,再cl task.cpp。OK!

安裝vs2008 的時候,已經自動安裝了SDK 其默認是安裝在C:\Program Files\Microsoft SDKs\Windows 很遺憾的是VS2008附帶的SDK是簡裝版的,沒有例子

問題和解決辦法:

The Microsoft Windows SDK is a set of tools, code samples, documentation, compilers, headers, and libraries that developers can use to create applications that run on Microsoft Windows operating systems. The Windows SDK combines two formerly separate SDKs: the Platform SDK (PSDK) and the .NET Framework SDK. For more information on the Windows SDK, visit our MSDN Developer Center.

Installing Win SDK for Svr 2008 after VS 2008 breaks VS command line build environment

Issue: After installing the Windows SDK for Server 2008, you are no longer able to build at the VS2008 command line. You receive an error that csc, vbc, and/or msbuild commands are not recognized. You are able to build without problems in the VS IDE.

Cause: The VC++ compilers that install with the Windows SDK overwrite vcvars32.bat improperly.

Workaround: Repair the VS2008 command line build environment by editing c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat manually.

Close all instances of Visual Studio:

1. Use Notepad to edit the file %\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat. Change the top few lines where the variables are set.

Change these lines:

@SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0
@SET VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0\VC
@SET FrameworkDir=Framework32
@SET FrameworkVersion=v2.0.50727

@if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR
@if "%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR

to the following, in order to set the correct path to the frameworkdir:

@SET VSINSTALLDIR=c:\Program Files\Microsoft Visual Studio 9.0
@SET VCINSTALLDIR=c:\Program Files\Microsoft Visual Studio 9.0\VC
@SET FrameworkDir=c:\Windows\Microsoft.NET\Framework
@SET FrameworkVersion=v2.0.50727
@SET Framework35Version=v3.5

@if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR
@if "%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR

2. Open the VS command line build environment and verify that you can build successfully.

Please email us directly if you need additional help.

Karin Meier

Windows SDK Program Manager

VC6代碼移植VS2008的SDK總結,包括OPENGL和DireX還有Cimage 【總結】
VS2008,VISTA系統

--------------------------------------------------------------------------------------------
【1】 有關OPENGL
--------------------------------------------------------------------------------------------

安裝了VS2008後,在目錄
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\gl 下:
GLU.h, GL.h, GLAUX.h

在目錄
C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib有對應的
OpenGL32.lib

如果需要其他lib庫,就必須裝SDK了,
我裝了nVidiaOPENGL的SDK。

在目錄C:\Program Files\NVIDIA Corporation\NVIDIA OpenGL SDK 10\external下有Include文件夾和Lib文件夾
Include:gl\:glut.h, zlib.h, png.h 等幾個圖像頭文件
Lib: glut32.lib, libpng.lib
這樣看來,glut.h --> glut32.lib

--------------------------------------------------------

在做項目移植時,如下變化

-------VC6用的庫 ------------------------》》》》 ------------- VS2008 --------------------

(1)DirectX8的

dxguid.lib -----------> ---- (same)
d3dx8.lib -----------> d3dx9.lib
ddraw.lib -----------> -----

(2)OPENGL的

opengl32.lib -----------> ----
glu32.lib -----------> X (delete)
glaux.lib -----------> X
----------> glut32.lib

(3)第三方自己開發的IMAGE庫

zlib.lib -----------> -----
cimage.lib -----------> ximage.lib (用的CxImage)
jpeg.lib -----------> ----
png.lib -----------> ----

(4) 多媒體庫

winMM.lib -----------> ----


----------------------------------------------------------


頭文件變化

#include "gl\gl.h" ----------> #include "gl.h"
#include "gl\glu.h" -----------> X
#include "gl\glaux.h" -----------> x
-----------> #include "glut.h"

以上說明

老版本:
glu.h ---> glu32.lib
glaux.h ---> glaux.lib

以上這些都用新版本的
glut.h ----> glut32.lib
來替代了
【注意】glu和glut的區別。

保留核心庫和頭文件(C:\Program Files\Microsoft SDKs\Windows\v6.0A)
gl.h -----> Opengl32.lib


-----------------------------------------------------------------------------------------
【2】 有關 DirectX
---------------------------------------------------------------------------------------------

VC6老版本用的是DX8,移植到VS2008,我換成DX9
Vista系統其實自帶了DX10,還有DX9,但是,如果不裝開發包SDK的話
只有頭文件d3d9.h和d3d10.h,找不到需要的d3d9x.h
裝了之後,

VC6 頭文件 ------> VS2008頭文件
--------------------------------------------------
d3d8.h ------------> d3d9.h
d3dx8.h ------------> d3dx9.h

本來以爲這樣改之後會沒有問題,沒想到出了大問題。原來DX8和DX9的函數根本不一樣,
不僅僅是函數名中的8要改成9,其實函數體也有不同,比如參數個數不同。由於我不熟悉
整個程序,所以根本沒法移植下去。
比如
LPDIRECT3D8 ----> LPDIRECT3D9


頭文件地址:
C:\Program Files\Microsoft SDKs\MicroSoft DirectX SDK (NOV 2008)\include

靜態鏈接庫地址LIB,需要 ( dxguild.lib, d3dx9.lib, ddraw.lib )
C:\Program Files\Microsoft SDKs\MicroSoft DirectX SDK (NOV 2008)\Lib\x86

---------------------------------------------------------------------------------------------
【3】CIMAGE的問題。
----------------------------------------------------------------------------------------------


首先,原始代碼作者用的CIMAGE的庫不知道是從哪裏來的。
頭文件包含
#include "cimage.h"

我試着用2個辦法來解決這個問題。

(1)把它改成 #include "atlimage.h"
誰知道根本不行,很多函數都在ATLIMAGE中找不到,報下列錯誤:
error C2039: 'ReadFile' : is not a member of 'ATL::CImage'
error C2039: 'Stretch' : is not a member of 'ATL::CImage'
error C2039: 'GetEffWidth' : is not a member of 'ATL::CImage'
error C2039: 'GetDepth' : is not a member of 'ATL::CImage'
error C2039: 'GetRGB' : is not a member of 'ATL::CImage'


(2)用CxImage,這個沒辦法,試試看
把頭文件改成 #include "ximage.h",當然,用這個之前要指定有關lib的位置。
誰知道一樣報錯找不到函數:
error C2039: 'ReadFile' : is not a member of 'CxImage'
error C2039: 'SaveFile' : is not a member of 'CxImage'
error C2039: 'implementation' : is not a member of 'CxImage'
error C2039: 'GetRawImage' : is not a member of 'CxImage'
error C2661: 'CxImage::Stretch' : no overloaded function takes 9 arguments

對CxImage來說,對應有Load, Save等。
在atlimage時,雖然有SaveFile和Implementation,但是都不是專門用在圖像處理的函數。用錯了。


總結:很顯然,3套圖像處理庫互不兼容,根本沒辦法。原來這套代碼是2001年左右的,那時候
沒有atlimage.h所以,會出現有第3方和MS存在SaveFile這些重疊的函數。

VS 2010中 C++的新增功能
[原文發表地址] C++ enhancements in VS 2010

[原文發表時間] Friday, November 21, 2008 8:36 AM

作爲我的VS2010和.net 框架4的系列博客之一, 今天我們來看看爲Visual C++ 中Native開發人員提供的新功能.

在我早先的一篇博客中, 我提到了Visual C++團隊爲幫助Native開發人員更好地在Windows平臺上進行開發而做的巨大努力. 今年初我們發佈了Visual C++ 2008 Feature Pack, 就是這項努力的成果之一. Visual Studio 2010沿着這個方向繼續發展以幫助C++開發人員提高開發效率, VS2010主要致力於對IDE的整體使用體驗進行重大改進,以及對語言和類庫的改進來爲C++開發人員提供更強大的功能.

Native C++應用程序近年來已變得更大更復雜. VS2010可以幫助C++開發人員很好地開發擁有大量代碼的C++程序. 其中一個重大的改進是智能感知 (IntelliSense). IDE大量功能都有使用到的智能感知引擎, 經過了重要的架構修正, 主要解決了處理大型應用程序時效率較低的問題. 一個主要的例子是在編輯較大的codebase中的源文件時,IDE仍能保持響應狀態. 源代碼的編輯不再觸發symbol數據庫大規模的更新, 即使是處理很複雜的源代碼依賴關係時. 經常編輯多層次include的頭文件的Visual C++開發人員或經常切換項目配置的開發人員將會明顯感覺到IDE響應性能的重大改進.

另一個Visual C++的改進在於構建系統. 在VS2010中, MSBuild 將會成爲Visual C++ 編譯的構建系統. MSBuild 提供強大的定製性、擴展性和日誌功能,這些都是大型複雜的構建環境中非常關鍵的要素。MSBuild的日誌功能可以將原先對經常構建的項目進行跟蹤的代價高而瑣碎事務變得非常容易。另外,擴展性功能提供了多個不同版本的編譯器,從VS2010的IDE中您可以看到下圖所示:

日益複雜的C++應用程序對工具和效率提出了更高的要求。VS2010提供了一組新的IDE高效工具, 幫助您輕鬆地瞭解複雜的Codebase。智能感知和瀏覽的功能都經過了修正,不僅能處理大型程序,而且變得更加準確和富有彈性。新的頭文件依賴關係工具能提供給您更多於複雜的include層次關係的具體細節。新的快速搜索功能幫助您快速定位到一個symbol或文件,您只需輸入名字的一部分並回車即可。

在類庫和語言方面,VS2010的一個重要改進是並行性。使用VS2010,C++開發人員可以高效地寫出並行計算的代碼,因爲新的C++語言在並行方面引入了一系列類庫和新功能的支持. VS2010提供了Parallel Patterns Library (PPL),它提供了一個抽象層充分利用多核的硬件來構建響應性能良好的C++應用程序。PPL提供了一種表達並行機制的高效的方法,並且還提供了新的異步通信API以幫助您提高應用程序的彈性和健壯性。VS2010提供了新的語言特性包括未來的C++0x標準,例如lamda表達式,並重定義了“auto”關鍵字使得基於PPL的代碼更整潔更易維護。最後,VS2010還提供了更多的對使用MFC構建的Windows應用程序的支持,VS2010爲MFC提供了一系列很棒的特性比以往更容易地利用Windows Vista以及之後的Windows7的特性。使用內置的重啓管理器,MFC應用程序能輕鬆獲得從非預期的應用程序失敗中恢復未儲存的應用程序數據的功能。任務對話框的支持將使得MFC應用能開發出更豐富的用戶界面,以取代冗長的消息對話框。

這些年來,我們聽到很多C++開發人員一直將過去的Visual C++6.0 時代認爲是Visual C++開發工具的輝煌時代。很多人懷念那個時候敏捷高效的IDE。在Visual C++ 2010中,我們努力開創一個高效Visual C++ IDE的新時代。我們將這個IDE與強大的C++語言支持、類庫的巨大改進一起在VS2010中呈現給大家。

您可以在團隊的blog中看到更多Visual C++的信息,並可在blog上與團隊交流。

如何打包程序請參考:

http://hi.baidu.com/285ru/blog/item/e59ed150754e7a6a8435245f.html


VS2005得include,library,src等路徑自動設置收藏
一般更改VS2005路徑都是通過打開VS2005,然後選擇”Tool”, “Options”, “Projects and Solutions”, “VC++ Directories”, 然後手動添加或刪除include, library, source路徑。

當經常需要批量更改路徑時,以上手動步驟就太繁瑣,太麻煩了。其實VS2005把這些路徑設置存在CurrentSettings.vssettings文件中。這個文件通常放在My Documents\Visual Studio 2005\Settings下。

可以以文本方式打開文件,可以看到它是一個xml格式,查找如下路徑可以找到include, library, source的設置:

---------------------------------------------------------------------------------------

<UserSettings>

<ToolsOptions>

<ToolsOptionsSubCategory name="VCDirectories" ……>

<PropertyValue name="IncludeDirectories"> …</PropertyValue>

<PropertyValue name="LibraryDirectories "> …</PropertyValue>

<PropertyValue name="SourceDirectories "> …</PropertyValue>

---------------------------------------------------------------------------------------


把裏面的內容整理一下,顯示如下:

---------------------------------------------------------------------------------------

Win32

|

$(VCInstallDir)lib;

$(VCInstallDir)atlmfc\lib;

$(VCInstallDir)atlmfc\lib\i386;

$(VCInstallDir)PlatformSDK\lib;

$(FrameworkSDKDir)lib;

$(VSInstallDir);

$(VSInstallDir)lib;

D:\works\ACE\ACE_wrappers\lib;

D:\local_vap\VAPLib;

D:\local_vap\MsXml3\lib;

D:\local_vap\Adfin\lib\mrv

|

Pocket PC 2003 (ARMV4)

|

$(VSInstallDir)SmartDevices\SDK\PocketPC2003\lib\ARMV4;

$(VCInstallDir)ce\atlmfc\lib\ARMV4;

$(VCInstallDir)ce\lib\ARMV4;

|

Smartphone 2003 (ARMV4)

|

$(VSInstallDir)SmartDevices\SDK\SmartPhone2003\lib\ARMV4;

$(VCInstallDir)ce\atlmfc\lib\ARMV4;

$(VCInstallDir)ce\lib\ARMV4;

---------------------------------------------------------------------------------------


可以看到他以|分隔開了不同的小塊,其中第二個小塊就是我們在VC中的include設置路徑,前面幾條是VC默認的,後面以D:開頭的就是個人後面添加的。手動改變這些字符就可以達到通過VC更改同樣的效果。

在這裏,我通過perl和dos的批處理自動進行include, library, src路徑的自動改變。

首先,創建一個文本文件,填入我們需要的路徑設置:

(My_vc_path.txt):

---------------------------------------------------------------------------------------

library=

D:\works\ACE\ACE_wrappers\lib;

D:\local_vap\VAPLib;

D:\local_vap\MsXml3\lib;

D:\local_vap\Adfin\lib\mrv;

include=

D:\works\ACE\ACE_wrappers;

D:\local_vap\VAPInclude;

D:\local_vap\Adfin\include\mrv;

D:\local_vap\MsXml3\inc;

src=

D:\works\ACE\ACE_wrappers\ace;

D:\works\dev_net\library\vaabase\trunk\Source Code;

---------------------------------------------------------------------------------------


然後是perl文件,他的主要功能就是打開My_vc_path.txt,讀入設置,然後再打開CurrentSettings.vssettings,查找相應路徑並進行替換。這裏要注意不要把VC默認的路徑給替換了。

Perl 程序代碼:

(vc_path_change.pl):

---------------------------------------------------------------------------------------

if (@ARGV < 2)

{

die ('usage : "vssettings file name" "your file name"');

}

$vc_path = @ARGV[0];

$my_vc_path = @ARGV[1];

$vsseeting_text = "";

@my_setting_lines = ();

if (! open (VC_PATH, $vc_path))

{

die ("can not open \"$vc_path\"");

}

else

{#讀入CurrentSettings.vssettings文件內容,並存入$vsseeting_text

@tmpLines = <VC_PATH>;

$vsseeting_text = join (" ", @tmpLines);

close (VC_PATH);

}

if (! open (MY_VC_PATH, $my_vc_path))

{

die ("can not open \"$my_vc_path\"");

}

else

{

@my_setting_lines = <MY_VC_PATH>;

chop (@my_setting_lines);

close (MY_VC_PATH);

}

@my_settings = ();

{#解析獲取自己的 include, lib, src 設置

@my_vc_path_para = ("include=", "library=", "src=");

$para_index = 0;

foreach $line (@my_setting_lines)

{

$math_para = 0;

for ($index=0; $index<3; ++$index)

{

if ($line =~ $my_vc_path_para[$index])

{

$math_para = 1;

$para_index = $index;

}

}

if ($math_para == 0)

{

$my_settings[$para_index] .= $line;

}

}

for ($index=0; $index<3; ++$index)

{

print ("$my_vc_path_para[$index]" . $my_settings[$index], "\n");

}

}

{#替換路徑

@str_header = ('<PropertyValue name="IncludeDirectories">',

'<PropertyValue name="LibraryDirectories">',

'<PropertyValue name="SourceDirectories">');

$str_ender = '</PropertyValue>';

for ($index=0; $index<3; ++$index)

{

#<PropertyValue name="IncludeDirectories"> …</PropertyValue>

$pattern = "(.*$str_header[$index])(.+?)($str_ender.*)";

@list1 = $vsseeting_text =~ /(.*$str_header[$index])(.+?)($str_ender.*)/s;

print ("Fetch full path : $list1[1]\n");

#Win32|$(VCInstallDir)include;...|...

@list2 = $list1[1] =~ /^(.*?\|)(.+?)(\|.*)/s;

print ("Fetch path : $list2[1]\n");

#$(VCInstallDir)include;...D:\local_vap\SSL\include;

@system_path = $list2[1] =~ /(\$.+?;)/g;

$list2[1] = join ("", @system_path) . $my_settings[$index];

print ("New path = $list2[1]", "\n");

$list1[1] = join ("", @list2);

$vsseeting_text = join ("", @list1);

}

}

if (! open (VC_PATH, ">" . $vc_path))

{

die ("can not open \"$out_path\"");

}

else

{

print VC_PATH ($vsseeting_text);

close (VC_PATH);

}

---------------------------------------------------------------------------------------

由於perl程序需要兩個參數,一個是CurrentSettings.vssettings文件的路徑,另一個是自己的設置文件,所以再寫個cmd文件。

---------------------------------------------------------------------------------------

set vssetting_file=C:\Documents and Settings\Jiqin.Hong\My Documents\Visual Studio 2005\Settings/CurrentSettings.vssettings

set my_file=./my_vc_path_1.txt

perl vc_path_change.pl "%vssetting_file%" "%my_file%"

---------------------------------------------------------------------------------------

好,到此完成,每次需要更改VC的include, library, src等路徑時,創建好文本路徑文件,填入設置,然後運行cmd文件即可。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xiaojianpitt/archive/2009/05/31/4229717.aspx

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