Search Google

Friday, April 18, 2008

Generate Makefile with Bakefiles (wxWidgets)

以下適用的環為:
MS Windows (XP) + MinGW + wxWidgets

大部分新接觸wxWidgets的人應該都會感到不知如何進行build的步驟,因為makefile實在是太複雜了,而開發者又得非常清楚wx的include files & libraries路徑,就我個人而言只能將wx app寄放在wxWidgets安裝路徑下然後借用wx samples的makefile(eg. minimal的makefile)稍作修改後進行編譯,但是這樣子實在不是很方便。在因緣際會下發現我們可以使用Bakefiles很容易地產生wx app的makefile。
以下是我google過後的心得筆記兼備忘錄。

Bakefiles是wxWidgets的某個作者設計用來產生Makefile用的工具程式,在安裝wxWidgets的同時也會將產生wxWidgets應用程式所需要的bakefile template(.bkl)一併安裝到電腦中(eg. C:\wxWidgets-2.8.7\build\bakefiles)。
從Bakefile網頁可取得安裝檔,安裝完畢之後可以在安裝目錄中找到使用說明(eg. C:\Program Files\Bakefile\doc\html\index.html)。
wxWidgets所附的範例(minimal.bkl)如下:

如果要在wxWidgets以外的目錄開發wx應用程式一樣可以使用wxWidgets所附的bakefile script,只需要做些小修改即可,如下(HelloWorldApp.bkl):

這裡我只將最上面兩行的xml標籤移除,並且將minimal改為HelloWorldApp,路徑也不存在於wxWigets的安裝路徑中,如此一樣可以成功build出使用wxWigets開發的GUI HelloWorldApp。

除了要bakefile script之外還需要一些簡單的步驟:
1. 建立ConfigureMinGW.bat(其中MinGW與wxWidgets的路徑請自行更改成正確的值)

與MinGW.bat(其中MinGW與wxWidgets的路徑請自行更改成正確的值)

使用MinGW.bat開啟console並用這個console作為編譯wx app的環境(當然要cd至工作目錄中!)。

2. 將wxWidgets附的bakefile template ("C:\wxWidgets-2.8.7\build\bakefiles\wxpresets\presets" 整個目錄,如圖所示)複製到wx app的根目錄中。

wxWidgets提供的template

複製到工作目錄中



只要完成以上的準備步驟便可以利用以下指令輕鬆編譯自行開發的wx app:
> bakefile -f mingw HelloWorldApp.bkl
> mingw32-make -f makefile.gcc
因為wxWidgets預設採用static link的方式進行編譯並且為DEBUG build,因此產出的執行檔體積相當大(27411KB),所以最後我們還需要利用strip替我們的執行檔減肥:
> strip --strip-unneeded HelloWorldApp.exe
這時候HelloWorldApp.exe的體積為2409KB,如果想要再精簡一點可以將comment section也移除:
> strip --remove-section=.comment HelloWorldApp.exe
最後HelloWorldApp.exe的體積為2386KB。

1 comment:

Lee V said...

Nice blog thankss for posting