深入理解軟體構造系統:原理與最佳實務

來源:互聯網
上載者:User
《深入理解軟體構造系統:原理與最佳實務》
基本資料
原書名:Software Build Systems:Principles and Experience
原出版社: Pearson Education
作者: (加)Peter Smith
譯者: 仲田
叢書名: 華章專業開發人員叢書
出版社:機械工業出版社
ISBN:9787111382263
上架時間:2012-5-25
出版日期:2012 年6月
開本:16開
頁碼:1
版次:1-1
所屬分類: 電腦 > 軟體工程及軟體方法學 > 綜合

更多關於》》》《深入理解軟體構造系統:原理與最佳實務》

內容簡介
電腦書籍
  構造系統在軟體開發過程中處於核心地位,它的正確性和效能,在一定程度上決定了軟體開發成果的品質和軟體開發過程的效率。本書作者作為一名軟體構造系統專家,總結了自己在構造系統開發和維護方面的多年經驗,對軟體構造系統的原理進行了深入淺出的剖析,並通過各種實際使用情境,對幾種最流行的構造工具進行了對比分析,另外還討論了構造系統的效能最佳化、規模提升等進階主題。
  《深入理解軟體構造系統:原理與最佳實務》分為四部分。第一部分:基礎知識,第1~5章分別從構造系統的高層概念、基於make的構造系統、程式的運行時視圖、檔案類型與編譯工具、子標的與構造變數等方面介紹構造系統的概念和相關主題。第二部分:構造工具,第6~10章結合實際情境案例,對gnu make、ant、scons、cmake和eclipse ide這五種構造工具進行分析比較,品評優劣,協助讀者瞭解構造工具的當前狀況,並理解每種工具的優缺點。第三部分:進階主題,第11~16章對依賴關係、中繼資料、軟體打包與安裝、構造機器、工具管理等進階主題進行討論,協助讀者理解關於建設構造系統的許多進階主題,並瞭解最佳實務。第四部分:提升規模,第17~19章討論了在大規模構造系統的環境下,如何降低複雜性,提高構造運行速度,協助讀者理解如何設計出能夠適應規模增長的小型構造系統,從而對軟體構造系統有更好的認識。
  《深入理解軟體構造系統:原理與最佳實務》適合軟體開發相關人員,包含軟體開發人員、專案經理、軟體構造專業人士等閱讀。
目錄
《深入理解軟體構造系統:原理與最佳實務》
對本書的讚譽
譯者序
前 言
致 謝
作者介紹
第一部分 基礎知識
第1章 構造系統概述2
1.1 什麼是構造系統2
1.1.1 編譯型語言3
1.1.2 解釋型語言3
1.1.3 web應用4
1.1.4 單元測試5
1.1.5 靜態分析5
1.1.6 文檔產生6
1.2 構造系統的各個組成部分6
1.2.1 版本控制工具7
1.2.2 源樹與目標樹7
1.2.3 編譯工具和構造工具8
1.2.4 構造機器9

.1.2.5 發布打包與目標機器9
1.3 構造過程和構造描述11
1.4 如何使用構造系統12
構造管理工具12
1.5 構造系統的品質13
本章小結14
第2章 基於make的構造系統15
2.1 calculator樣本15
2.2 建立一個簡單的makefile17
2.3 對這個makefile進行簡化19
2.4 額外的構造任務20
2.5 架構的運用21
本章小結23
第3章 程式的運行時視圖24
3.1 可執行程式24
3.1.1 原生機器碼25
3.1.2 單體系統鏡像25
3.1.3 程式完全解釋執行26
3.1.4 解釋型位元組碼26
3.2 程式庫28
3.2.1 靜態連結28
3.2.2 動態連結29
3.3 設定檔和資料檔案30
3.4 分布式程式30
本章小結31
第4章 檔案類型與編譯工具33
4.1 c/c++34
4.1.1 編譯工具34
4.1.2 源檔案35
4.1.3 組合語言檔案37
4.1.4 目標檔案38
4.1.5 可執行程式40
4.1.6 靜態程式庫40
4.1.7 動態程式庫41
4.1.8 c++編譯42
4.2 java43
4.2.1 編譯工具43
4.2.2 源檔案44
4.2.3 目標檔案45
4.2.4 可執行程式47
4.2.5 程式庫48
4.3 c#48
4.3.1 編譯工具49
4.3.2 源檔案49
4.3.3 可執行程式51
4.3.4 程式庫53
4.4 其他檔案類型55
4.4.1 基於uml的代碼產生56
4.4.2 圖形映像57
4.4.3 xml設定檔58
4.4.4 國際化與資源綁定58
本章小結59
第5章 子標的與構造變數60
5.1 針對子標的進行構造61
5.2 針對軟體的不同版本進行構造62
5.2.1 指定構造變數63
5.2.2 對代碼的定製調整65
5.3 針對不同的目標系統架構進行構造68
5.3.1 多重編譯器68
5.3.2 面向指定平台的檔案/功能69
5.3.3 多個目標樹69
本章小結71
第二部分 構造工具
現實情境75
情境1:原始碼放在單個目錄中75
情境2:原始碼放在多個目錄中76
情境3:定義新的編譯工具76
情境4:針對多個變數進行構造77
情境5:清除構造樹77
情境6:對不正確的構造結果進行調試78
第6章 make79
6.1 gnu make程式設計語言80
6.1.1 makefile規則:用來建立依賴關係圖80
6.1.2 makefile規則的類型81
6.1.3 makefile變數82
6.1.4 內建變數和規則84
6.1.5 資料結構與函數85
6.1.6 理解程式流程87
6.1.7 進一步閱讀資料90
6.2 現實世界的構造系統情境90
6.2.1 情境1:原始碼放在單個目錄中90
6.2.2 情境2(a):原始碼放在多個目錄中92
6.2.3 情境2(b):對多個目錄進行迭代式make操作93
6.2.4 情境2(c):對多個目錄進行包含式make操作96
6.2.5 情境3:定義新的編譯工具101
6.2.6 情境4:針對多個變數進行構造102
6.2.7 情境5:清除構造樹104
6.2.8 情境6:對不正確的構造結果進行調試105
6.3 讚揚與批評107
6.3.1 讚揚107
6.3.2 批評108
6.3.3 評價109
6.4 其他類似工具110
6.4.1 berkeley make110
6.4.2 nmake111
6.4.3 electricaccelerator和spark build111
本章小結113
第7章 ant115
7.1 ant程式設計語言116
7.1.1 比“hello world”稍多一些116
7.1.2 標的的定義和使用118
7.1.3 ant的控制流程119
7.1.4 屬性的定義120
7.1.5 內建的和可選的任務122
7.1.6 選擇多個檔案和目錄125
7.1.7 條件126
7.1.8 擴充ant語言127
7.1.9 進一步閱讀資料128
7.2 現實世界的構造系統情境129
7.2.1 情境1:原始碼放在單個目錄中129
7.2.2 情境2(a):原始碼放在多個目錄中130
7.2.3 情境2(b):多個目錄,多個build.xml檔案130
7.2.4 情境3:定義新的編譯工具133
7.2.5 情境4:針對多個變數進行構造136
7.2.6 情境5:清除構造樹140
7.2.7 情境6:對不正確的構造結果進行調試141
7.3 讚揚與批評142
7.3.1 讚揚143
7.3.2 批評143
7.3.3 評價144
7.4 其他類似工具144
7.4.1 nant144
7.4.2 ms build145
本章小結146
第8章 scons147
8.1 scons程式設計語言148
8.1.1 python程式設計語言148
8.1.2 簡單編譯151
8.1.3 管理構造環境154
8.1.4 程式流程和依賴關係分析157
8.1.5 決定何時重新編譯158
8.1.6 擴充該語言160
8.1.7 其他有趣的特性162
8.1.8 進一步閱讀資料163
8.2 現實世界的構造系統情境163
8.2.1 情境1:原始碼放在單個目錄中163
8.2.2 情境2(a):原始碼放在多個目錄中163
8.2.3 情境2(b):多個sconstruct檔案164
8.2.4 情境3:定義新的編譯工具165
8.2.5 情境4:針對多個變數進行構造167
8.2.6 情境5:清除構造樹168
8.2.7 情境6:對不正確的構造結果進行調試169
8.3 讚揚與批評171
8.3.1 讚揚171
8.3.2 批評172
8.3.3 評價173
8.4 其他類似工具173
8.4.1 cons173
8.4.2 rake174
本章小結176
第9章 cmake177
9.1 cmake程式設計語言178
9.1.1 cmake語言基礎178
9.1.2 構造可執行程式和程式庫179
9.1.3 控制流程182
9.1.4 跨平台支援184
9.1.5 產生原生構造系統185
9.1.6 其他有趣的特性以及進一步閱讀資料190
9.2 現實世界的構造系統情境191
9.2.1 情境1:原始碼放在單個目錄中191
9.2.2 情境2:原始碼放在多個目錄中191
9.2.3 情境3:定義新的編譯工具192
9.2.4 情境4:針對多個變數進行構造193
9.2.5 情境5:清除構造樹194
9.2.6 情境6:對不正確的構造結果進行調試194
9.3 讚揚與批評195
9.3.1 讚揚195
9.3.2 批評195
9.3.3 評價196
9.4 其他類似工具196
9.4.1 automake196
9.4.2 qmake197
本章小結197
第10章 eclipse199
10.1 eclipse的概念和gui199
10.1.1 建立項目200
10.1.2 構造項目206
10.1.3 運行項目210
10.1.4 使用內部項目模型212
10.1.5 其他構造特性213
10.1.6 進一步閱讀資料214
10.2 現實世界的構造系統情境215
10.2.1 情境1:原始碼放在單個目錄中215
10.2.2 情境2:原始碼放在多個目錄中216
10.2.3 情境3:定義新的編譯工具217
10.2.4 情境4:針對多個變數進行構造217
10.2.5 情境5:清除構造樹220
10.2.6 情境6:對不正確的構造結果進行調試220
10.3 讚揚與批評221
10.3.1 讚揚221
10.3.2 批評221
10.3.3 評價222
10.4 其他類似工具222
本章小結224
第三部分 進階主題
第11章 依賴關係226
11.1 依賴關係圖227
11.1.1 增量式編譯228
11.1.2 完全、增量式和子標的構造228
11.2 依賴關係錯誤導致的問題229
11.2.1 問題:依賴關係缺失導致執行階段錯誤229
11.2.2 問題:依賴關係缺失導致編譯錯誤230
11.2.3 問題:多餘的依賴關係導致大量不必要的重新構造231
11.2.4 問題:多餘的依賴關係導致依賴關係分析失敗231
11.2.5 問題:循環相依性關係232
11.2.6 問題:以隱式隊列順序替代依賴關係232
11.2.7 問題:clean標的什麼也清除不了233
11.3 步驟一:計算依賴關係圖233
11.3.1 擷取確切的依賴關係234
11.3.2 把依賴關係圖緩衝起來236
11.3.3 對緩衝的依賴關係圖進行更新237
11.4 步驟二:判斷哪些檔案已到期239
11.4.1 基於時間戳記的方法240
11.4.2 基於校正和的方法241
11.4.3 標誌參數比較242
11.4.4 其他進階方法243
11.5 步驟三:為編譯步驟排定隊列順序243
本章小結246
第12章 運用中繼資料進行構造247
12.1 調試支援247
12.2 效能分析支援249
12.3 代碼覆蓋分析支援250
12.4 原始碼文檔化251
12.5 單元測試253
12.6 靜態分析256
12.7 向構造系統加入中繼資料257
本章小結258
第13章 軟體打包與安裝259
13.1 歸檔檔案260
13.1.1 用於打包的指令碼260
13.1.2 其他歸檔檔案格式262
13.1.3 對打包指令碼的改進263
13.2 包管理工具265
13.2.1 rpm包管理工具格式265
13.2.2 rpm build過程266
13.2.3 rpm規格檔案樣本267
13.2.4 根據規格檔案建立rpm檔案272
13.2.5 安裝rpm樣本274
13.3 定製式gui安裝工具275
13.3.1 nullsoft scriptable install system(nsis)276
13.3.2 安裝工具指令碼277
13.3.3 定義安裝頁面280
13.3.4 許可授權頁面281
13.3.5 選擇安裝目錄282
13.3.6 主要組件282
13.3.7 可選組件283
13.3.8 定製頁面285
13.3.9 安裝頁面和卸載程式286
本章小結288
第14章 版本管理289
14.1 對哪些東西進資料列版本設定290
14.1.1 構造描述檔案290
14.1.2 對工具的引用292
14.1.3 大型二進位檔案296
14.1.4 對源樹的配置296
14.2 哪些東西不應當放到源樹中297
14.2.1 產生的檔案被儲存到源樹中297
14.2.2 產生的檔案被納入到版本控制中299
14.2.3 構造管理指令碼299
14.3 版本編號300
14.3.1 版本編號體系300
14.3.2 協調並更新版本號碼301
14.3.3 版本號碼的儲存與檢索302
本章小結303
第15章 構造機器305
15.1 原生編譯與跨平台編譯306
15.1.1 原生編譯306
15.1.2 跨平台編譯306
15.1.3 異構環境307
15.2 集中式開發環境307
15.2.1 構造機器為何有差異308
15.2.2 管理多個構造機器310
15.3 開源開發環境312
15.4 gnu autoconf315
15.4.1 高層次工作流程315
15.4.2 autoconf樣本317
15.4.3 運行autoheader和autoconf319
15.4.4 在構造機器上運行configure指令碼320
15.4.5 使用配置資訊322
本章小結323
第16章 工具管理324
16.1 工具管理的規則324
16.1.1 規則1:做筆記324
16.1.2 規則2:對原始碼進資料列版本設定325
16.1.3 規則3:定期升級工具326
16.1.4 規則4:對工具的二進位檔案進資料列版本設定327
16.1.5 對規則的破壞329
16.2 編寫自己的編譯工具329
用lex和yacc編寫定製工具330
本章小結332
第四部分 提升規模
第17章 降低終端使用者面對的複雜性334
17.1 構造架構334
17.1.1 面向開發人員的構造描述335
17.1.2 面向架構的構造描述336
17.1.3 慣例優先於配置336
17.1.4 構造工具樣本:maven337
17.2 避免支援多個構造變數的原因338
17.2.1 需要測試更多的構造變數338
17.2.2 代碼會變得混亂339
17.2.3 構造時間會增多340
17.2.4 需要更多磁碟空間340
17.3 降低複雜性的各種技術方法340
17.3.1 使用現代構造工具340
17.3.2 自動檢測依賴關係341
17.3.3 把產生的檔案放在源樹之外341
17.3.4 確保正確清除構造樹341
17.3.5 碰到第一個錯誤即中止構造342
17.3.6 提供有意義的錯誤資訊343
17.3.7 校正輸入參數343
17.3.8 不要把構造指令碼搞得過分複雜344
17.3.9 避免使用晦澀的語言特性344
17.3.10 不要用環境變數控制構造過程345
17.3.11 確保構造形成的發布版與調試版保持相似345
17.3.12 準確顯示正在執行的命令346
17.3.13 把對工具的引用納入版本控制347
17.3.14 把構造指令納入版本控制347
17.3.15 自動檢測編譯標誌參數的變化347
17.3.16 不要在構造系統中調用版本控制工具347
17.3.17 盡量頻繁地進行持續整合348
17.3.18 統一使用一種構造機器348
17.3.19 統一使用一種編譯器348
17.3.20 避免遺留#ifdefs的垃圾代碼348
17.3.21 使用有意義的符號名349
17.3.22 刪除垃圾代碼349
17.3.23 不要複製源檔案350
17.3.24 使用統一的構造系統350
17.4 對構造系統進行規劃充分、人力充足的改進351
本章小結352
第18章 管理構造規模353
18.1 單體模型構造存在的問題354
18.2 組件式軟體355
18.2.1 使用組件的好處357
18.2.2 組件到底是什麼358
18.2.3 把多個組件整合到單個產品中361
18.3 人員和過程管理364
18.3.1 Team Dev的結構365
18.3.2 組件版本隊列管理367
18.3.3 管理組件緩衝368
18.3.4 協調軟體新特性的開發370
18.4 apache ivy372
本章小結373
第19章 更快的構造375
19.1 度量構造系統效能375
19.1.1 啟動階段的效能度量375
19.1.2 編譯階段的效能度量382
19.1.3 效能度量工具386
19.1.4 修正問題:改進效能388
19.2 構造減免:消除不必要的重新構造389
19.2.1 目標檔案緩衝389
19.2.2 智能依賴關係391
19.2.3 構造減免的其他技術方法395
19.3 並行396
19.3.1 構造叢集/雲396
19.3.2 並行構造工具397
19.3.3 對延展性的限制398
19.4 減少磁碟使用398
本章小結400
參考文獻401

本圖書資訊來源:中國互動出版網

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.