VS2010 C++環境下DLL和LIB檔案目錄及名稱修改

查志強發表於2016-02-05

【原文:http://www.cnblogs.com/lidabo/archive/2013/08/16/3261305.html

DLL工程,Debug版本下輸出檔案由basetool.dll basetool.lib 改為basetoolD.dll basetoold.lib 需設定:


1、配置屬性-常規-目標檔名 $(ProjectName) 加d

2、配置屬性-聯結器-常規-輸出問件 由 加d

3、配置屬性-聯結器-高階-匯入庫,設定檔名$(OutDir)$ProjectName)d.lib

4、如果有匯出檔案,.def檔案中也一定要修改匯出庫的名字

        LIBRARY      "BaseTool"

      變為

      LIBRARY      "BaseToold"

關於相對目錄

相對目錄是相對某個檔案而言的,例如在 VC 專案屬性配置附加包含目錄、附加庫目錄則是相對 *.dsp 、 *.vcproj 檔案而言的;在某個 *.c 、 *.cpp 檔案中使用 #include 包含命令,是相對這個 *.c 、 *.cpp 檔案而言的。

當前目錄是可見的,一般直接引用檔名(夾)

對於子資料夾可以新增“./” 。

.. :父目錄

../include :父目錄下的 include 目錄

../.. :祖父目錄

http://www.cnblogs.com/include :祖父目錄下的 include 目錄


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

<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word;">C/C++附加包含目錄和VC++目錄包含目錄區別?
聯結器常規附加庫目錄和VC++目錄庫目錄區別?
聯結器-輸入-附加依賴項
</pre><pre class="best-text mb-10" name="code" style="margin-top: 0px; margin-bottom: 10px; white-space: pre-wrap; word-wrap: break-word; padding: 0px; font-family: arial, 'courier new', courier, 宋體, monospace; background-color: rgb(255, 252, 246);">附加依賴項 是指輸入項,如某個.LIB檔案a.lib,<span style="line-height: 1.5;">新增到附加依賴項,你的LIB檔案被真正包含進來了。等同於“#pragma comment(lib, "winsock.lib") ”語句</span>
附加庫目錄 是你用 #pragma comment(lib,"a.lib")的時候;此時就搜尋a.lib的路徑列表就包含這個路徑。

把它所在的目錄新增到附加庫目錄裡面 :僅僅包含目錄只是告訴IDE,搜尋沒有指定路徑的庫檔案時,也搜尋這裡。

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

VC配置基礎點選開啟連結

一.預處理巨集

1. 通用巨集

VC6.0 中:

Project Setting à C/C++ à Preprocessor definitions

VC2005 中

專案屬性 à 配置屬性 à C/C++ à 前處理器定義

 

WIN32 :指明是 Window 32 位系統的編譯器,一般用作平臺識別。

_MBCS/_UNICODE :指明該工程使用的字符集(多位元組字符集 /UNICODE )。

在 VC6.0 的 “Project Setting à C/C++ à Project Options” 處將會有 /D "_MBCS" 或 /D "_UNICODE" 開關。

在 VC2005 的  專案屬性 à 配置屬性 à 常規 à 專案預設值 à 字符集  中選擇  使用多位元組字符集  或  使用 Unicode 字符集  ;在  專案屬性 à 配置屬性 à C/C++ à 使用 UNICODE 響應檔案  中選擇  是  或 否  。在  專案屬性 à 配置屬性 à C/C++ à 命令列 ” 處將會有 /D "_MBCS" 或 /D "_UNICODE" /D "UNICODE" 開關。

當專案中的檔案具有 UNICODE 路徑(例如中文路徑)時,應在  專案屬性 à C/C++ à 常規  和  專案屬性 à 連結器 à 常規  中開啟  使用 UNICODE 響應檔案  開關。

_CONSOLE/_WINDOWS :指明應用程式的型別(控制檯程式 /Windows 視窗應用程式)。

_DEBUG/NDEBUG :指明編譯版本( Debug/Release )。

除此之外, VC 不同的專案型別,有一些特定的巨集,以在編譯器區分專案型別。

2. 特定巨集

( 1 ) Win32 Static Library 專案

VC6.0 中:

Project Setting à C/C++ ( Category : General ) à Preprocessor definitions : _LIB

如果選擇了 MFC Support 則 _WINDOWS,_AFXDLL

VC2005 中

專案屬性 à 常規 à 配置型別 à 靜態庫 (.lib)

專案屬性 à C/C++ à 前處理器 à 前處理器定義: _LIB

( 2 ) Win32 Dynamic-Link Library 專案

VC6.0 中:

Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_USRDLL,DLL_EXPORTS

VC2005 中

專案屬性 à 常規 à 配置型別 à 動態庫 (.dll)

專案屬性 à C/C++ à 前處理器 à 前處理器定義: _WINDOWS;_USRDLL;DLL_EXPORTS

( 3 ) MFC DLL 專案

<1>Regular DLL with MFC statically linked (帶靜態連結 MFC 的規則 DLL )

VC6.0 中:

Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_USRDLL

VC2005 中

專案屬性 à C/C++ à 前處理器 à 前處理器定義: _WINDOWS;_USRDLL

<2>Regular DLL using shared MFC DLL (使用共享 MFC DLL 的規則 DLL )

VC6.0 中:

Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_AFXDLL , _USRDLL

VC2005 中

專案屬性 à C/C++ à 前處理器 à 前處理器定義: _WINDOWS;_USRDLL

<3>MFC Extension DLL ( using shared MFC DLL )( MFC 擴充套件 DLL )

VC6.0 中:

Project Setting à C/C++ à Preprocessor definitions : _WINDOWS,_WINDLL,_AFXDLL ,_USRDLL

VC2005 中

專案屬性 à C/C++ à 前處理器 à 前處理器定義: _WINDOWS; _AFXEXT

在 DLL 專案中, _USRDLL 巨集表示生成 Export Lib !

 

關於 VC 編譯器預處理巨集,參考:

《 Predefined Macros ( VC6.0 ) 》

《 C/C++ Preprocessor Reference-Predefined Macros ( VC8.0 )》

《 What’s the difference between the WIN32 and _WIN32 defines in C++ 

 

二.工作目錄和控制檯程式執行引數

VC6.0 中:

“Project Setting à Debug à Working directory” 處填寫 exe 程式的工作目錄。

在 “Project Setting à Debug à Program argument” 處填寫 main 執行引數。

VC2005 中

在  專案屬性 à 配置屬性 à 除錯 à 工作目錄  處填寫 exe 程式的工作目錄。

在  專案屬性 à 配置屬性 à 除錯 à 命令引數  處填寫 main 執行引數。

 

預設的工作目錄為 ProjectDir ,即 *.dsw/*.vcproj 所在目錄。

通過編譯器啟動( Ctrl + F5 )應用程式時,可以將所依賴的 lib 和 dll 庫檔案所在目錄設為工作目錄。應用程式執行期間,建立、儲存檔案將在工作目錄中。

工作目錄是指當前目錄, GetCurrentDirectory() 得到的路徑; SetCurrentDirectory 來改變。

執行目錄是指 exe 所在路徑,可通過 GetModuleFileName() 得到。

 

三.附加標頭檔案包含

VC6.0 中:

VC6.0 預設 include 包含路徑: Tools à Options à Directories à Include files 。

對於特定專案的標頭檔案包含,在 “Project Setting à C/C++ ( Category : Preprocessor ) à Additional include directories” 處新增附加標頭檔案目錄,相對目錄參考 *.dsp 檔案。

目錄路徑不需新增雙引號,路徑分隔符為 ’/’ 或 ’/’ ,不必考慮反斜槓 ’/’ 的轉義。多個路徑之間以逗號 分隔。

相應的在 “Project Setting à C/C++ à Project Options” 中將會出現 “/I” 的包含命令。

VC2005 中

VC2005 預設 include 包含路徑:工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案。

對於特定專案的標頭檔案包含,在  專案屬性 à 配置屬性 à C/C++ à 常規 à 附加包含目錄  處新增附加包含目錄,相對目錄參考 *.vcproj 檔案。

目錄路徑不需新增雙引號,路徑分隔符為 ’/’ 或 ’/’ ,不必考慮反斜槓 ’/’ 的轉義。多個路徑之間以分號 分隔。

相應的在  專案屬性 à 配置屬性 à C/C++ à 命令列 ” 中將會出現 /I ” 的包含命令。

關於 #include 的兩種包含方式

#include   <std*.h> 為編譯器指定的包含路徑下的標頭檔案: 即在 VC6.0 中的 “Tools à Options à Directories à Include files” (對應 VC2005 的  工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案  )處指定的包含目錄。預設情況下包括

( 1 ) $(VCInstallDir)include ( /Microsoft Visual Studio /VC98/INCLUDE )

( 2 ) $(VCInstallDir)atlmfc/include ( /Microsoft Visual Studio /VC98/ATL/INCLUDE 、 /Microsoft Visual Studio /VC98/MFC/INCLUDE )

( 3 ) $(VCInstallDir)PlatformSDK/include ( VC2005 )。

使用者也可以自己新增包含路徑到此。

對於 “Tools à Options à Directories à Include files” (  工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案  )目錄下的檔案的包含,一般可使用尖括號包含。系統對尖括號的包含優先到編譯器設定的包含路徑下定位,再到附加包含目錄下進行定位。

#include "MyHeader.h" 為在 “Tools à Options à Directories à Include files” (  工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案  )處人工新增的 包含路徑下的標頭檔案或者 附加包含目錄下的標頭檔案。

對於編譯器提供的標準庫函式標頭檔案( “Tools à Options à Directories à Include files” (  工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案  )),一般使用尖括號進行包含宣告,當然使用雙引號包含也沒有錯。

對於在 “Tools à Options à Directories à Include files” (  工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 包含檔案  )處人工新增的 包含路徑和附加包含目錄下的標頭檔案的包含可以使用尖括號進行包含,但一般使用雙引號。

原則上,對於工程或檔案可見的包含目錄下的標頭檔案包含,使用以上兩種包含方式中的任一種都不會出錯,主要是它們在搜尋目錄時的順序不一樣。習慣上使用尖括號包含 標準庫函式標頭檔案,使用雙引號包含使用者自定義標頭檔案。建議除標準 SDK (如 DirectX 等),一般針對具體工程使用附加標頭檔案包含即可,儘量不要去動編譯器的 “Tools à Options à Directories à Include files” (對應 VC2005 的  工具 à 選項 à 專案和解決方案 àVC++ 目錄 à 包含檔案  )作編譯器級全域性配置。下面的連結庫包含處理同此。

External Dependencies 裡面顯示的是你的工程要用到的標頭檔案,不在你的工程裡面,而且也不在 VC 的預設包含路徑中。參考:《 VC6.0的 External Dependencies 》。

 

四.附加連結庫包含

VC6.0 中:

VC6.0 預設 lib 包含路徑: Tools à Options à Directories à Library files

對於特定專案的標頭檔案包含,可以通過以下兩步新增附加連結庫:

1. 在 “Project Setting à Link ( Category : Input ) à Additional library path” 處新增附加庫目錄,相對目錄參考 *.dsp 檔案。

目錄路徑不需新增雙引號,路徑分隔符為 ’/’ 或 ’/’ ,不必考慮反斜槓 ’/’ 的轉義。多個路徑之間以逗號 分隔。

相應的將會在 “Project Setting à Link à Project Options” 處同步 /libpath ” 庫包含命令。

2. 在 “Project Setting à Link ( Category : General ) à Object/Library Modules” 處新增庫檔名 YourLib.lib  也可在檔案中使用 #pragma comment(lib, "YourLib.lib" ) 顯式 匯入所依賴的靜態庫),多個庫之間以空格 分隔。

相應的將會在 “Project Setting à Link à Project Options” 處同步包含的庫名稱。

VC2005 中

VC2005 預設 lib 包含路徑:工具 à 選項 à 專案和解決方案 à VC++ 目錄 à 庫檔案

對於特定專案的庫檔案包含,可以通過以下兩種方式新增附加庫目錄:

1.

( 1 )在  專案屬性 à 配置屬性 à 連結器 à 常規 à 附加庫目錄  處輸入附加庫目錄路徑,相對目錄參考 *.vcproj 檔案。

目錄路徑不需新增雙引號,路徑分隔符為 ’/’ 或 ’/’ ,不必考慮反斜槓 ’/’ 的轉義。多個路徑之間以分號 分隔。

相應的將會在  專案屬性 à 配置屬性 à 連結器 à 命令列  處同步 “/LIBPATH” 庫包含命令。

( 2 )在  專案屬性 à 配置屬性 à 連結器 à 輸入 à 附加依賴項 ” 處新增庫檔名 YourLib.lib  也可在檔案中使用 #pragma comment(lib, "YourLib.lib") 顯式 匯入所依賴的靜態庫),多個庫之間以空格 分隔。

相應的將會在  專案屬性 à 配置屬性 à 連結器 à 命令列  處同步包含的庫名稱。

2.

在  專案屬性 à 配置屬性 à 連結器 à 命令列 ” 處新增庫檔名 YourLib.lib  必要時新增相對目錄,保證 YourLib 的可見性)。

 

五.生成檔案目錄設定

VC6.0 中:

在 “Project Setting à General à Output directories” 的 “Output files” 處填寫 *.exe 或 *.lib/*.dll 的生成目錄,相應在 “Project Setting à Link (或 Library ) à Output file name” 處將會同步檔案輸出路徑。相對目錄參考 *.dsp 檔案。

在 “Project Setting à General à Output directories” 的 “Intermediate files” 處填寫中間檔案生成目錄。相對目錄參考 *.dsp 檔案。

VC2005 中

在  專案屬性 à 常規 à 輸出目錄  處填寫輸出目錄,在  專案屬性 à 常規 à 中間目錄  處填寫中間目錄,相對目錄參考 *.vcproj 檔案。

在  專案屬性 à 連結器(或管理員) à 常規 à 輸出檔案  處填寫輸出檔案路徑。

輸出目錄( OutDir )一般為 $(SolutionDir)$(ConfigurationName)

輸出檔案( OutputFile )一般為 $(OutDir)/$(ProjectName).exe ( *.lib , *.dll )

說明 

$(SolutionDir) 為 *.sln 檔案所在資料夾,尾帶 ‘/’ ;

$(ProjectDir) 為 *.vcproj 檔案所在資料夾,尾帶 ‘/’ ;

$(ConfigurationName) 為 *.sln 的 *.vcproj 檔案所在資料夾下的 debug 、 release 資料夾,參考 *.vcproj 檔案中的 <Configurations> 配置項。

具體在  專案屬性 à 配置屬性 à 除錯 à 命令  下拉點選  編輯  ,展開  巨集 (M )>>” ,可以看到很多專案內建巨集。

一般的配置為:

輸出目錄 ( OutDir ): $(ProjectDir)$(PlatformName)/$(ConfigurationName)

中間目錄 ( IntDir ): $(OutDir)/Intermediate

輸出檔案 : $(OutDir)/$(ProjectName).lib(dll 、 exe)

 

六.關於相對目錄

相對目錄是相對某個檔案而言的,例如在 VC 專案屬性配置附加包含目錄、附加庫目錄則是相對 *.dsp 、 *.vcproj 檔案而言的;在某個 *.c 、 *.cpp 檔案中使用 #include 包含命令,是相對這個 *.c 、 *.cpp 檔案而言的。

當前目錄是可見的,一般直接引用檔名(夾),對於子資料夾可以新增 ”./” 。

.. :父目錄

../include :父目錄下的 include 目錄

../.. :祖父目錄

http://www.cnblogs.com/include :祖父目錄下的 include 目錄

 

七.依賴專案聯編

一個解決方案 (dsw 、 sln) 可以建立很多輔助子專案 (dsp 、 vcproj) ,如何設定使在編譯主專案的時,先編譯所依賴的輔助專案呢?

一般會配置輔助子專案的 OutDir 和主專案相同,這樣生成的 lib 或 dll 對於主專案 exe 直接可見。

VC6.0 中:

選擇選單 “Project à Dependencies” 可以選擇需要聯編的專案。

VC2005 中

在解決方案資源管理器中右擊專案名稱,選擇  引用  或  專案依賴項  選單,可選擇專案依賴項,並可以設定依賴順序。

 

八.附加DLL 除錯

VC6.0 中:

如果你需要除錯的 DLL 是動態裝入( LoadLibrary )的,則需要在 “Project Setting à Debug ( Category : Additional DLLs )  處新增這個 DLL 檔案。

 

九.匯出makefile

VC6.0 中選擇選單 “Project à Export Makefile” 即可匯出 Makefile 檔案 *.mak 。

VC6 以後不再支援 makefile 輸出了。

參考:《 VC的 MAKE檔案的語法 》,《 vs6 IDE匯出的 makefile使用方法 》,《 教你在 VS2005下寫 MakeFile 

 

十.程式碼的編輯與閱讀導航

Visual Studio 本身就帶有充分的程式碼組織、編輯、分析以及閱讀能力的支援。

VC6.0 和 VC2005 中的 “Edit à Find in Files” 支援指定專案、工程或檔案內的關鍵字搜尋。

VC6.0 的 “Tools à Source Browser” ,提供對 “Definitions and References” 、 “File Outline” 、 “Base Classes and Members” 、 “Derived Classes and Members” 、 “Call Graph” 、 “Callers Graph” 等導航功能支援。

VC2005 右鍵快捷選單中支援  查詢所有引用  ;右鍵快捷選單中的  呼叫瀏覽器  支援函式呼叫關係圖和被呼叫關係圖的檢視。  類檢視設定  中支援顯示  基型別  、  派生型別  、  繼承成員  等功能。

此外,在閱讀程式碼時,我們可以使用書籤( Bookmark )來設定錨點,這樣就可以實現基於書籤的自定義索引導航。

下面介紹常用的程式設計輔助外掛軟體及原始碼層次結構分析工具軟體。

1. Visual Assist X 是一款非常好的 Microsoft Visual Studio 輔助外掛,支援 C/C ++, C #, ASP  Visual Basic  Java  HTML 等語言,能自動識別各種關鍵字、系統函式、成員變數、自動給出輸入提示、自動更正大小寫錯誤、自動標示錯誤等,有助於提高開發過程的自動化和開發效率。

2 . Windows 下的 Source Insight 是一個面向專案開發的程式編輯器和程式碼導航瀏覽器, 它還能顯示 reference trees , class inheritancediagrams 和 call trees 。相應的 Linux 下閱讀原始碼的利器 Source Navigator 能很好地解決檔案定位和跳轉問題。

3 . Rational Rose 是利用 UML (統一建模語言)進行分析和設計物件導向軟體系統的強大的視覺化工具,可以進行專案需求分析、結構規劃和生成框架程式碼,還可以支援從現有系統逆向轉出工程程式碼,生成 Rose 模型的功能。

逆向工程( Reverse Engineer )就是從現有系統的程式碼來生成模型的功能。通過 Rational Rose 分析已有的程式碼,可瞭解程式碼結構和資料結構,生成類層次關係圖、資料模型圖和元件圖。

 

十一. VC6 常用快捷鍵

Alt+F7 : Project Settings

 

Ctrl+J/K :尋找上一個 / 下一個預編譯條件

Ctrl+Shift+J/K :尋找上一個 / 下一個預編譯條件並將這一塊選定

 

Ctrl+Tab :當前開啟文件和上一次開啟文件切換。

Alt+O :標頭檔案與 cpp 檔案的互動顯示

 

F12 : Goto definition

Shift+F12 : Goto reference

 

Ctrl+Home : 文件頭

Ctrl+Shift+Home : 選定從當前位置到文件頭

Ctrl+End : 文件尾

Ctrl+Shift+End : 選定從當前位置到文件尾

Alt+F8 :自動格式重排

Ctrl+F4 :關閉當前文件

 

Ctrl+Z/Alt+Backspace : Undo

Ctrl+Shift+Z/Ctrl+Y : Redo

 

Ctrl+B/Alt+F9 : 編輯斷點

Ctrl+Shift+F9 : 去掉所有斷點

 

Ctrl+D : 定位工具條查詢輸入欄

Alt+F3/Ctrl+F :當前文件 查詢

Ctrl+F3 : 查詢下一個

Ctrl+Shift+F3 : 查詢上一個

Ctrl+H :替換

Ctrl+] :括號匹配

 

Ctrl+  : 向上滾屏

Ctrl+  : 向下滾屏

Ctrl+  : 移到前一個單詞

Ctrl+  : 移到後一個單詞

Ctrl+Shift+  : 選定當前位置到前一個單詞

Ctrl+Shift+  : 選定當前位置到後一個單詞

 

Ctrl+Backspace : 刪除當前單詞的前半截(以游標為分割)

Ctrl+Del : 刪除當前單詞的後半截(以游標為分割)

Ctrl+L :剪下當前行

Ctrl+Shift+L :刪除當前 行

 

F2 :上一個書籤

Shift+F2 :上一個書籤

Alt+F2 :編輯書籤

Ctrl + F2 :新增 / 刪除一個書籤

Ctrl+Shift+F2 : 清除所有書籤

 

 

參考:

《 VC的環境設定 

《 VC6.0工程設定介紹 

《 Visual C++ 6.0環境配置 

《 VC 2005 解決方案的目錄結構設定和管理 

《 Managing Solutions, Projects, and Files 

《 File Types Created for Visual C++ Projects 


相關文章