如何用 Visual Studio 2010 編譯 Notepad++ 原始碼
一、下載 Notepad++ source code
Notepad++官網: http://notepad-plus-plus.org
可以使用 svn check out 原始碼直接下載當前最新的 trunk 或是直接下載 released 的整包原始碼。
SVN Repository:svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk
直接看 trunk 內容:http://svn.tuxfamily.org/notepadplus/repository/trunk/
整包:http://download.tuxfamily.org/notepadplus/6.5.5/npp.6.5.5.src.7z
原始碼裡面有兩個目錄:
..\PowerEditor ..\scintilla
及一個說明文件 readmeFirst.txt 文件,該文件就是編譯步驟說明,基本上照著裡面的說明進行即可。
先將原始碼檔案解壓(或下載)到一個路徑沒有空白字元及非ASCII字元的路徑裡。
二、編譯 Scintilla
因為Notepad++是基於 Scintilla http://www.scintilla.org/ 開發的,所以需要先編譯Scintilla。
Scintilla 編譯的部分會分為兩種情況,差別在於是否包含 Boost。
因為 SciLexer.dll(編譯 Scintilla 後產生的動態鏈結函式庫)從 Notepad++ 6.0 以後發布的版本包括了 Boost 的 PCRE (Perl Compatible Regular Expressions) 程式庫,PCRE 是一個Perl 函式庫,包括 Perl 相容的正規表示式函式庫,所以編譯 Scintilla 需要 Boost 的支援。如果不包含 Boost,則編譯 Scintilla 時預設使用 POSIX 這個正規表示式函式庫來代替PCRE,這樣也能正常編譯執行 Notepad++,但是可能會導致部分功能不正常。
這裡可以根據自己的需要進行抉擇,筆者建議採用 Perl 的 RegExp 會比較好。
- 採用 Boost 的編譯步驟
- 到 Boost 官方網站 http://www.boost.org/ 下載函式庫包
- 解壓到一個路徑沒有空白字元及非ASCII字元的路徑裡
- 以 Visual Studio 2010 的命令列工具,進入 \scintilla\ 目錄
(在 程式集 > Microsoft Visual Studio 2010 > Visual Studio Tools >Visual Studio 命令提示字元 (2010),這點相當重要,因為 VS2010 的命令列工具會帶入所有執行環境變數,才能讓接下來的 make 作業正常執行,別像筆者直接 cmd 去跑,撞到一堆錯誤...) - 進入 \scintilla\boostregex\ 目錄下執行 BuildBoost.bat,參數為 Boost 放置的路徑,例如:BuildBoost.bat E:\Lib\boost_1_55_0,或是也可以選擇性加上 --toolset msvc-10.0 參數表示用 VS2010 的版本去編譯
- 以上完成後,到 \scintilla\win32\ 目錄執行 nmake -f scintilla.mak
- 不採用 Boost 的編譯步驟
- 進入 \scintilla\win32\ 目錄下執行 nmake NOBOOST=1 -f scintilla.mak
編譯成功之後在 \scintilla\bin 目錄下會看到兩個 DLL 檔案,分別為 Scintilla.dll、SciLexer.dll,這等一下要搬到 Notepad++ 編譯後的 bin 目錄裡。
三、編譯 Notepad++
用 Visual Studio 開啟 \PowerEditor\visual.net 目錄裡的專案檔案,並讓它從 VS2005 升級到 VS2010 的檔案格式,接下來請依照 Notepad++ Wiki 裡所述:
專案 -> 屬性 -> VC++ 目錄,變更以下三個搜尋順序,將 $(WindowsSdkDir) 的移到 $(VCInstallDir) 前面
- In Show directories for -> Executable Files, move $(WindowsSdkDir)\bin up so its above $(VCInstallDir)\bin.
- In Show directories for -> Include Files, move $(WindowsSdkDir)\include up so its above $(VCInstallDir)\include.
- In Show directories for -> Library Files, move $(WindowsSdkDir)\lib up so its above $(VCInstallDir)\lib.
選擇組態為 Unicode Debug,按下開始偵錯,接下來就會在 \PowerEditor\visual.net\Unicode Debug 裡生出一堆檔案,還有幾個 OutputFile 屬性值 (notepadPlus_Debug) 不相符的警告,先不用理它。
把 Scintilla.dll、SciLexer.dll 兩個檔案複製到 \PowerEditor\visual.net\Unicode Debug 目錄,然後執行 notepadPlus_Debug.exe 應該就可以運作了。
四、編譯時期警告
- "Error C2220 警告被視為錯誤" 的問題
- 解決辦法:專案 ->屬性->組態屬性-> C/C++ -> 將 "警告視為錯誤" 的值改為 "否"
- Notepad++ 輸出檔名的問題
- 解決辦法:專案 ->屬性->組態屬性-> 連結器 -> 輸出檔案,修改檔名 notepadPlus_Debug.exe 為 Notepad++.exe
References: