Programming Fun

1,886 views
1,795 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,886
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
16
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Programming Fun

  1. 1. Programming Fun Author: Derek Dai
  2. 2. 寫 code, 好玩 <ul><li>嗎 ? </li></ul>
  3. 3. Derek 說 <ul><li>寫 code, 當然不好玩 </li></ul>
  4. 4. 因為 ? <ul><li>如果 </li></ul><ul><ul><li>只是想有個能頂著科技新貴的頭銜的工作 </li></ul></ul><ul><ul><li>只是因為教育機構的廣告說資訊業很’高尚’而加入 </li></ul></ul><ul><ul><li>只是 8x5x52x30 機械化的動作著 </li></ul></ul><ul><li>這樣 , 何止是不好玩 , 是真他 X 的痛苦人生 </li></ul>
  5. 5. 那…怎麼辦 ? <ul><li>丟棄 ‘寫 code’ 這回事 </li></ul><ul><li>修正觀念 </li></ul><ul><ul><li>軟體 研發 , 從來就不是只有寫 code 一件事 </li></ul></ul><ul><ul><li>彈性是要表現在架構上 , 而不是團隊的紀律 ! 台灣在看軟體業時一直有這樣的誤解 </li></ul></ul><ul><ul><li>設計 , 是要一直花心思維持的 </li></ul></ul><ul><ul><li>創意 , 是解決問題的關鍵 ( 軟體從來就不是死板板的 ) </li></ul></ul><ul><ul><li>溝通 , 是團隊能成功的要素 </li></ul></ul>
  6. 6. 還有 <ul><li>導入 Open Source </li></ul>
  7. 7. 進入正題 <ul><li>將使用的一些玩意兒 </li></ul><ul><ul><li>Eclipse IDE </li></ul></ul><ul><ul><li>Cmake </li></ul></ul><ul><ul><li>git </li></ul></ul><ul><ul><li>GNU toolchain </li></ul></ul><ul><ul><li>GTK+ </li></ul></ul><ul><ul><li>完完全全的 free ( 自由 ) & free ( 免費 ) </li></ul></ul>
  8. 8. 為什麼要用 open source? <ul><li>跨平台 , 經驗 重用 </li></ul><ul><li>習慣了 , 就會愛上它 </li></ul><ul><li>但…也有可能第一次接觸就恨死它 </li></ul><ul><ul><li>Package 散落各處 </li></ul></ul><ul><ul><li>怎麼組合出 work 的東西 ? </li></ul></ul><ul><ul><li>Document, give me some document? </li></ul></ul><ul><ul><li>Where is pre-built binary for XXX platform? I don’t wanna build it myself… </li></ul></ul>
  9. 9. 開發工具介紹 <ul><li>Eclipse + CDT : 好用的 C/C++ 跨平台 IDE </li></ul><ul><ul><li>Netbeans 也不錯 , 但目前 CMake 還未支援 </li></ul></ul><ul><li>CMake : 跨平台 /IDE/compiler 的 build/deploy tool </li></ul><ul><li>git : 超強的分散式版本控制系統 </li></ul><ul><ul><li>TortoisGIT: Windows 下方便的 git frontend </li></ul></ul><ul><li>Mingw32 : GNU toolchain 的 Windows port </li></ul><ul><ul><li>binutils </li></ul></ul><ul><ul><li>GCC </li></ul></ul><ul><ul><li>GDB </li></ul></ul>
  10. 10. 開發工具間的關係 Eclipse Mingw32 GDB GCC Git TortoiseGIT GUI: 不一定要使用 輔助工具 核心開發工具 CMake GUI frontend Source code version management Generate IDE project file Generate make file to build automatically Debug Build
  11. 11. 以時間點來看開發工具的關係 <ul><li>以 Madedit 寫了經典的“ hello world”, 以 gcc build 成執行檔 , 以 gdb 除錯 </li></ul><ul><li>Project 加進 2, 3 個檔案後 , build 變得複雜 , 此時以 CMake 自動化 build 流程 </li></ul><ul><li>Code 變大後 , 在 browse & debug 上相形困難 , 以 CMake 產生 IDE 的 project file, 用 Eclipse 便利開發 </li></ul><ul><li>多次變更 code 後 , 導致有不同時間的版本 , 可考慮以 git 管理 </li></ul><ul><li>系統在功能性及穩定性達到要求後有發佈的需求 , CMake 可產生多樣的安裝包 </li></ul>
  12. 12. 建立開發環境 - 安裝 Mingw32 <ul><li>http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/ </li></ul><ul><ul><li>執行 MinGW-5.1.6.exe 網路安裝界面後加選 g++ 及 make </li></ul></ul><ul><ul><li>強烈 建議 安裝於 “ c:MinGW” </li></ul></ul><ul><ul><li>安裝後 , 請將 “ c:MinGWin” 加到系統 PATH 環境變數中 </li></ul></ul>
  13. 13. 建立開發環境 - 安裝 gdb <ul><li>http://sourceforge.net/projects/mingw/files/ </li></ul><ul><ul><li>選 ” GNU Source-Level Debugger” 並下載 6.6 </li></ul></ul><ul><ul><li>先不要使用太新的版本 , 於 Eclipse 整合除錯時會有問題 (6.8 似乎也是 OK 的版本 ) </li></ul></ul><ul><ul><li>下載後 , 直接解壓至 “ c:MinGW” 中 </li></ul></ul>
  14. 14. 建立開發環境 - 安裝 CMake <ul><li>http://www.cmake.org/cmake/resources/software.html </li></ul><ul><ul><li>下載並執行 cmake-2.8.0-win32-x86.exe 即可 </li></ul></ul><ul><ul><li>無特殊安裝目錄需求 </li></ul></ul><ul><ul><li>請將 CMake 安裝目錄下的 in 加進 PATH </li></ul></ul>
  15. 15. 建立開發環境 - 安裝 Eclipse + CDT <ul><li>Eclipse 以 Java 開發 , 需要 JRE </li></ul><ul><ul><li>http://java.sun.com/javase/downloads/index.jsp </li></ul></ul><ul><ul><li>下載 JRE6 or JDK6 </li></ul></ul><ul><ul><li>安裝 </li></ul></ul><ul><li>Eclipse IDE for C/C++ </li></ul><ul><ul><li>http://www.eclipse.org/downloads/ </li></ul></ul><ul><ul><li>選 Eclipse IDE for C/C++ Developers 的 Windows 版 </li></ul></ul><ul><ul><li>下載後 , 解壓縮即可執行 </li></ul></ul>
  16. 16. 建立開發環境 – 安裝 g it <ul><li>http://code.google.com/p/msysgit/ </li></ul><ul><ul><li>下載最新版並安裝即可 </li></ul></ul><ul><li>http://code.google.com/p/tortoisegit/ </li></ul><ul><ul><li>TortoiseGit 會使用到 msysygit </li></ul></ul><ul><ul><ul><li>這是隻包著糖衣的烏龜 – 在開發跨平臺的程式時 , 不是一直都有整合得這麼好的 GUI 可用的 </li></ul></ul></ul><ul><ul><li>絕對要會下 git 的命令 </li></ul></ul>
  17. 17. 建立開發環境 – 安裝 GTK+ <ul><li>http://www.gtk.org/download-windows.html </li></ul><ul><ul><li>下載 all-in-one bundle , 或是可以各別下載 runtime 及 developlement packages </li></ul></ul><ul><ul><ul><li>如果是後者 , 請先瞭解 libraries 間的相依性 </li></ul></ul></ul><ul><ul><li>解壓後 , 將 bin 目錄加進 PATH 環境變數中 , 會用到下面的部份 </li></ul></ul><ul><ul><ul><li>glib 相關工具 </li></ul></ul></ul><ul><ul><ul><li>pkg-config </li></ul></ul></ul><ul><ul><ul><li>Runtime libraries (.dlls) </li></ul></ul></ul>
  18. 18. 建立 project HelloCmake <ul><li>目的 </li></ul><ul><ul><li>確認 git, mingw32, gdb, Eclipse , CMake </li></ul></ul><ul><li>建立目錄 HelloCMake, 並將接下來兩頁的 code 各存成 hellocmake.c 及 CMakeLists.txt </li></ul><ul><ul><li>在跨平台的開發中 , 要特別注意檔案大小寫 </li></ul></ul><ul><ul><ul><li>Windows 中 file name 是 case insensitive, </li></ul></ul></ul><ul><ul><ul><li>Linux 則是 case sensitive </li></ul></ul></ul><ul><ul><ul><li>所以 , 請假設所有平台都是 case sensitive </li></ul></ul></ul><ul><ul><ul><li>但 , 請勿濫用 case sensitive ( 例如於同一目錄中放置同名不同大小寫的檔案 ) </li></ul></ul></ul>
  19. 19. hellocmake.c <ul><li>/* hellocmake.c */ </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;Hello Cmake &quot;); </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul>
  20. 20. CMakeLists.txt <ul><li># CMakeLists.txt </li></ul><ul><li>PROJECT( HelloCMake ) </li></ul><ul><li>SET( CMAKE_BUILD_TYPE Debug ) </li></ul><ul><li>ADD_EXECUTABLE( </li></ul><ul><li>hellocmake #Executable name </li></ul><ul><li>hellocmake #Source file name </li></ul><ul><li>) </li></ul>
  21. 21. 以 Cmake 產生 Makefile <ul><li>CMake 的其中一個功能是 Makefile generator </li></ul><ul><ul><li>於 HelloCMake 目錄同一階建立 HelloCMake_build 目錄 </li></ul></ul><ul><ul><li>於命令列 , cd 進入 HelloCMake_build, 並執行 </li></ul></ul><ul><ul><ul><li>cmake -G&quot;MinGW Makefiles&quot; ..HelloCMake </li></ul></ul></ul><ul><ul><ul><li>mingw32-make </li></ul></ul></ul><ul><ul><ul><li>hellocmake.exe </li></ul></ul></ul><ul><ul><li>執行程式後 , 應該可以看到 “ Hello Cmake” 的輸出 </li></ul></ul>
  22. 23. 以 CMake 產生 Eclipse CDT project <ul><li>進入 HelloCMake_build, 執行 </li></ul><ul><ul><li>cmake -G&quot;Eclipse CDT4 - MinGW Makefiles&quot; ..HelloCMake </li></ul></ul><ul><li>打開 Eclipse, 選 File -> Import… -> General -> Existing Projects into Workspace </li></ul><ul><ul><li>於 Select root directory 中輸入 HelloCMake_build 所在完整路徑 </li></ul></ul><ul><ul><li>Finish 後 , Project 即匯入 </li></ul></ul>
  23. 26. 開始 debugging <ul><li>雖然我們的程式太簡單沒 bug, 但還是可以用 gdb single step 玩玩 </li></ul><ul><ul><li>Double click “printf” 那行的左側 , 增加 break point </li></ul></ul><ul><ul><li>於左側分頁展開 Binaries -> right click “hellocmake.exe” -> Debug As -> Locale C/C++ Application -> gdb Debugger </li></ul></ul><ul><ul><li>Eclipse 即進入 Debug 模式 </li></ul></ul>
  24. 28. 單步執行 HelloCMake <ul><li>按 F5 可 step into, 追進即將執行的 function </li></ul><ul><li>按 F6 可 step over, 碰到 function 只當一個步驟走過 </li></ul><ul><li>按 F7 可 step return, 離開目前的 function, 回到 caller 中的下個執行位置 </li></ul><ul><li>按 F8 可 Resume, 讓程式自由的執行 , 直到碰到 break pointer, 或是被我們手動打斷 </li></ul>
  25. 29. 將 HelloCMake 加進版本控制 <ul><li>進到 HelloCMake 中 </li></ul><ul><li>執行 </li></ul><ul><ul><li>git init 建立 git repository </li></ul></ul><ul><ul><li>git add * 將 hellocmake.c 及 CMakeLists.txt 進入版本控制的行列中 </li></ul></ul><ul><ul><li>git commit -m “Initial commit” Commit 後 , source 才算真的進入 git, 版號加 1 </li></ul></ul>
  26. 30. 結束 <ul><li>啥 ! 怎麼沒提到 GTK+ 勒 ? 是 download 心酸的喔 ! </li></ul><ul><ul><li>看官放心 ~ 耐心等等 , 下個例子就會用到 </li></ul></ul>

×