建立嵌入式軟體開發的自動構建環境
轉載時請註明出處和作者聯絡方式
作者聯絡方式:李先靜 <xianjimli at hotmail dot com>
每日構建(daily build)已經不是什麼新概念了,它已經成為軟體專案的基本活動之一。至於它的好處,已經有不少文章和書籍介紹了,這裡不再多說了。雖然說,各種軟體開發都差不多,但在嵌入式軟體開發的這個領域,似乎對於新的方法和概念的接受要較晚一些。筆者曾呆過的兩家公司,以前都沒有自動構建環境,其它公司的情況則不太清楚。
一方面可能是不知道如何實現自動構建環境; 一方面也可能是工作太忙,大家都懶得到去建立這個環境,其實這反而浪費了更多的時間。筆者曾在三家公司建立過自動構建環境,這些知識都很簡單,沒有什麼值得保密的,只是知與不知的問題,如果你恰巧也在做這方面的工作,或許有點幫助。
1. 實現定時執行的功能。
在win32下,可以按下列步驟建立一個自動執行的任務:
執行我的電腦-->控制皮膚-->任務計劃-->新增任務計劃。
按照提示的步驟輸入相關資訊。
在Linux下,可以用at或cron建立一個自動執行的任務,具體用法可以檢視相關幫助。
2. 實現自動獲取原始碼的功能。目前管理原始碼的工具,數開源的cvs和微軟的sourcesafe的使用最為廣泛。對於前者,雖然現在也有GUI的客戶端,但在多數時候,用命令列的cvs反而更地道一點,在指令碼中使用cvs的獲取原始碼,不會有什麼問題。而後者,大家用慣了GUI的介面,甚至有人沒有聽說過sourcesafe的命令列工具,會用的人更為鮮見。幸運的是,微軟提供了一個叫作ss.exe命令列的工具,這為自動獲取sourcesafe上的原始碼大開方便之門。
3. 實現自動編譯的功能。
a) Makefile的情況。如果使用makefile管理你的工程,自動編譯一點問題也沒有。
b) ADS的情況。如果你使用ADS管理你的工程,你有兩種方法可以選擇。
i. 第一種方法:把mcp轉換成Makefile,但ADS本身並不提供這種轉換,你需要從網上下載一個mcp2make的小工具。如果你並不是經常在工程裡的增刪檔案,這種方法不錯,否則每次增刪檔案後,都要重新產生Makefile,那就比較麻煩了。
ii. 第二種方法:ADS提供了一個叫cmdide的工具,它雖然也是GUI的,但它在編譯過程中,無需使用者介入。它的使用方法很簡單,唯一不爽的就是它的編譯錯誤資訊不能儲存下來,如果編譯出錯了,你無法知道到底是哪裡出錯了。
c) VC的情況。大多數嵌入式軟體開發組,都會在VC裡建立一套模擬開發環境。這樣,在PC上可以執行大部分功能,這將節省不少除錯時間。自動編譯VC也好幾種方法:
i. 第一種方法:從VC工程匯出Makefile檔案,它的Makefile與gmake是不相容的,要用微軟提供的nmake才能編譯。
ii. 第二種方法:在指令碼中執行MSDEV.EXE,可以指定dsw的名稱和編譯的方式(CLEAN/BUILD/REBUILD),如:MSDEV.EXE c:/temp/t1/t1.dsw /MAKE "t1 - Win32 Debug" /REBUILD
iii. 第三種方法:用VC提供的COM介面,呼叫VC的編譯功能。
4. 實現自動生成安裝包的功能。現在大多數安裝工具都提供指令碼控制功能,你只要寫好一個配置檔案,它自動生成安裝包。在開發嵌入式軟體時,常常不需要這些功能,要做的不過是把程式bin檔案、資原始檔和下載工具等,拷貝到一個目錄下,再把它壓縮一個壓縮檔案就行了。
5. 實現自動通知的功能。通知的方式有多種,郵件通知是最為常用的一種。實現很簡單,網上已經有一些命令列的郵件工具,可以直接使用。或者下載一個SMTP的庫,寫很少的程式碼就可以實現一個SMTP的客戶工具。
一般來說,自動構建就是以上幾個步驟。有的可能複雜一些,比如,有的要求,編譯前從指定的位置更新檔案,如果編譯成功,則要把這些檔案checkin到原始碼管理系統中; 也有的要求,編譯成功後執行自動測試程式。這些功能是輔助性,實施起來難度不大,這裡不做詳細討論。
相關文章
- 用 Docker 構建 PHP 開發環境DockerPHP開發環境
- Docker 構建統一的前端開發環境Docker前端開發環境
- 如何構建基於 docker 的開發環境Docker開發環境
- mac配置自動化環境所需要的軟體Mac
- 基於 GitLab CI 搭建前端自動構建環境Gitlab前端
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- 基於 Vagrant 構建 PHP 開發環境PHP開發環境
- 嵌入式軟體開發的特點、設計流程、嵌入式軟體的結構
- 徒手用 Docker 構建自己的 PHP 開發環境DockerPHP開發環境
- 構建你的Office 365開發環境 - IOS版開發環境iOS
- 用Vagrant構建統一的golang開發環境Golang開發環境
- 構建你的Office 365開發環境 - 其他版本開發環境
- 構建一個基於容器的開發環境開發環境
- 基於 Docker 構建統一的開發環境Docker開發環境
- 簡單建立VC + DDK的驅動開發環境開發環境
- Mac 環境下 Android 使用 Jenkins 構建自動化打包MacAndroidJenkins
- 從零搭建嵌入式開發環境開發環境
- 圍繞 transformers 構建現代 NLP 開發環境ORM開發環境
- 酷!一鍵構建我自己的PHP框架的開發環境PHP框架開發環境
- 開發環境下PP檔案的建立開發環境
- Flutter環境搭建以及開發軟體安裝Flutter
- IDE-整合開發環境軟體介紹IDE開發環境
- Python開發篇——構建虛擬Python開發環境(Conda+Poetry)Python開發環境
- 【進階系列】前端開發環境構建(一)CSS -- Sass前端開發環境CSS
- webpack4.0 入門篇 - 構建前端開發的基本環境Web前端
- Docker化自動採集&模擬惡意軟體環境Docker
- 直播軟體開發,自動滾動banner
- dockerfile構建flask環境DockerFlask
- docker構建php環境DockerPHP
- Vue 3與ESLint、Prettier:構建規範化的前端開發環境VueEsLint前端開發環境
- 利用 Docker 構建一個簡單的 java 開發編譯環境DockerJava編譯
- 嵌入式軟體開發中必備軟體工具
- React Native——搭建開發環境、建立Hello WorldReact Native開發環境
- 開發環境Push證書的建立圖文流程開發環境
- ARM開發環境入門(嵌入式作業二)開發環境
- 使用VSCode和CMake構建跨平臺的C/C++開發環境VSCodeC++開發環境
- Docker 構建PHP 映象環境DockerPHP
- docker 靈活的構建 PHP 環境DockerPHP