Ada 程式設計/構建
Ada 程式通常比用其他語言(如 C 或 C++)編寫的程式更容易構建,這些語言通常需要 Makefile。這是因為 Ada 原始檔已經指定了其源單元的依賴關係。有關詳細資訊,請參見 with 關鍵字。
構建 Ada 程式未在參考手冊中定義,因此此過程完全取決於編譯器。通常,編譯器套件包含一個 make 工具,用於編譯主程式及其所有依賴項,並連結可執行檔案。
- 此列表不完整。您可以透過 新增其他編譯器的構建資訊 來幫助華夏公益教科書。
Alire 是一個構建工具和包管理器,它自動管理包依賴關係,包括下載所需的構建工具。它基於 GNAT 編譯器。
您可以使用 alr init 建立一個新專案
alr init test
Select the kind of crate you want to create:
1. LIBRARY
2. BINARY
Enter your choice index (first is default):
> 1
Enter a short description of the crate: (default: '')
> Testing alr init
Select a software license for the crate?
1. MIT OR Apache-2.0 WITH LLVM-exception
2. MIT
3. Apache-2.0 WITH LLVM-exception
4. Apache-2.0
5. BSD-3-Clause
6. LGPL-3.0-or-later
7. GPL-3.0-or-later WITH GCC-exception-3.1
8. GPL-3.0-or-later
9. Other...
Enter your choice index (first is default):
> 8
Enter a comma (',') separated list of tags to help people find your crate: (default: '')
> test
Enter an optional Website URL for the crate: (default: '')
> https://wikibook-ada.sourceforge.net/
✓ test initialized successfully.
Alire 支援下面提到的 GNAT 大多數功能,以及相同的 IDE 和程式碼編輯器。
使用 GNAT,您可以執行此命令
gnat make <your_unit_file>
如果檔案包含一個過程,gnatmake 將生成一個可執行檔案,該檔案將過程作為主程式。否則,例如一個包,gnatmake 將編譯單元及其所有依賴項。
gnatmake 可以寫成一個詞 gnatmake 或兩個詞 gnat make。要檢視 gnat 命令的完整列表,只需鍵入 gnat 而不帶任何命令選項。輸出將類似於以下內容
GNAT 3.4.3 Copyright 1996-2004 Free Software Foundation, Inc. List of available commands GNAT BIND gnatbind GNAT CHOP gnatchop GNAT CLEAN gnatclean GNAT COMPILE gnatmake -c -f -u GNAT ELIM gnatelim GNAT FIND gnatfind GNAT KRUNCH gnatkr GNAT LINK gnatlink GNAT LIST gnatls GNAT MAKE gnatmake GNAT NAME gnatname GNAT PREPROCESS gnatprep GNAT PRETTY gnatpp GNAT STUB gnatstub GNAT XREF gnatxref Commands FIND, LIST, PRETTY, STUB and XREF accept project file switches -vPx, -Pprj and -Xnam=val
要獲得有關選項的更多幫助,只需鍵入命令(一個詞或兩個詞——隨你喜歡)而不帶任何命令選項。
GNAT 工具鏈附帶一個名為 IDE 的 GPS,包含在 GNAT 的 GPL 版本 的最近釋出版本中。GPS 具有 圖形使用者介面。
Emacs 包含 (Ada 模式),並且 KDevelop 和 Vim (Ada 模式) 的 GNAT 外掛可用。
Vim Ada 模式由 GNU Ada 專案 維護。
Apple 的免費(免費)IDE,Xcode,使用 LLVM 編譯器,前端為 Clang,不支援 Ada:但是,在 OS X Lion 及更高版本的 Xcode 4.3 中,使用 GNAT 所需的命令列工具(彙編器、連結器等)是 Xcode 的可選元件,必須 專門安裝。
Rational APEX 是一個完整的開發環境,包含語言敏感的編輯器、編譯器、偵錯程式、覆蓋率分析器、配置管理等等。您通常在執行 GUI 的情況下使用 APEX。
APEX 是為開發大型程式而構建的。因此,APEX 的基本實體是子系統,一個具有 APEX 識別的某些特徵的目錄。所有 Ada 編譯單元都必須駐留在子系統中。
您可以定義一個匯出集,即對其他子系統可見的 Ada 單元集。但是,要使子系統 A 能夠看到另一個子系統 B,A 必須匯入 B。匯入後,A 會看到 B 的匯出集中所有單元。(這很像 with 子句,但這裡的可見性僅意味著 Ada 的潛在可見性:要真正可見的單元必須在外部子系統的 Ada 單元的 with 子句中提及;匯出集之外的單元不能在 with 子句中使用。)
通常,子系統應該按層次順序排列,即形成一個有向圖。但出於特殊用途,子系統也可以相互匯入。
為了進行配置管理,子系統被分解成檢視,子系統的子目錄。檢視包含 Ada 單元的不同開發版本。因此,實際上並不是子系統匯入其他子系統,而是子系統檢視匯入其他子系統的檢視。(當然,所有匯入的閉包必須一致——不能出現例如子系統 (A,檢視 A1) 匯入子系統 (B,B1) 和 (C,C1),而 (B,B1) 匯入 (C,C2) 的情況)。
可以將一個檢視定義為開發檢視。然後其他檢視將儲存不同階段的版本。
每個 Ada 編譯單元都必須駐留在它自己的檔案中。編譯 Ada 單元時,編譯器會遵循 with 子句。如果在包含編譯的子系統中找不到單元,則編譯器會搜尋匯入列表(只考慮直接匯入,不考慮閉包)。
單元可以被納入版本控制。在每個子系統中,可以定義一組歷史記錄。一個 Ada 單元可以在一個歷史記錄中被納入控制。如果您想編輯它,您首先必須簽出它——它將獲得一個新的版本號。更改後,您可以再次簽入它,即使更改永久化(或者放棄更改,即返回到以前的版本)。您通常只在開發檢視中籤出單元;禁止在釋出檢視中籤出單元。
您可以選擇哪個版本是活動版本;通常是最近簽入的版本。您甚至可以切換歷史記錄以獲得不同的開發路徑。例如,同一規範的不同主體用於不同的目標。
ObjectAda 是用於編輯、編譯、導航和除錯用 Ada 編寫的程式的一組工具。ObjectAda 有各種版本。對於某些版本,您可以在執行工具的相同平臺和作業系統上編譯程式。這些被稱為本地版本。對於其他版本,您可以為不同的作業系統和平臺生成程式。一個可能的平臺是 Java 虛擬機器。
這些說明適用於原生 Microsoft Windows 版本。您可以從 IDE 或命令列執行翻譯工具。
無論您喜歡從 IDE 工作還是從命令列工作,都需要進行一些簿記工作。這是透過建立一個專案來完成的。每個專案都包含多個原始檔,以及多個設定,例如用於附加 Ada 庫和其他依賴項的搜尋路徑。每個專案也至少有一個目標。通常,有一個除錯目標和一個釋出目標。目標的名稱指示其目的。在某些時候,您會進行除錯編譯,通常是在開發過程中,而在其他時候,您會使用不同的設定進行編譯,例如當程式準備好釋出時。ObjectAda 的某些(所有商業?)版本允許使用 Java(VM)目標。
DEC Ada 是一個 Ada 83 編譯器,用於 VMS。雖然“DEC Ada”可能是大多數使用者所知的名稱,但編譯器現在被稱為“HP Ada”。它以前也稱為“VAX Ada”和“Compaq Ada”。
DEC Ada 使用真正的庫管理系統——因此您需要做的第一件事是建立並激活一個庫。
ACS Library Create [MyLibrary] ACS Set Library [MyLibrary]
在建立庫時,您已經設定了一些約束,例如對 Long_Float 的支援或可用的記憶體大小。所以仔細閱讀
HELP ACS Library Create *
下一步是將您的 Ada 原始碼載入到庫中。
ACS Load [Source]*.ada
原始碼在這個階段不必完美,但語法正確足以讓編譯器確定宣告的包並分析with 語句。Dec Ada 允許您在一個原始檔中包含多個包,您可以使用任何您喜歡的檔名約定。ACS Load 的目的是建立原始檔之間的依賴關係樹。
接下來,您需要編譯它們。
ACS Compile *
請注意,編譯需要包名而不是檔名。萬用字元*表示所有已載入的包。編譯器會自動確定編譯的正確順序,因此嚴格來說不需要 make 工具。
最後,您將檔案連結到
ACS Link /Executable=[Executables]Main.exe Main
在大型系統上,您可能希望將原始碼分解成多個庫——在這種情況下,您還需要
ACS Merge /Keep *
將當前庫的內容與層次結構中更高級別的庫合併。然後應該使用
ACS Library Create /Large
來建立更大的庫。這使用不同的目錄佈局,更適合大型庫。
Dec Ada 沒有附帶 IDE,但是 DEC LSE 以及 Ada 模式 的 Vim 文字編輯器 支援 DEC Ada。
一旦您 下載 了我們的示例程式,您可能會想知道如何編譯它們。
除非您使用 Alire,否則您需要解壓縮原始碼。使用您最喜歡的 zip 工具 來完成此操作。解壓縮後,會建立一個與檔名相同的目錄。注意:WinZip 也可能會建立一個與檔名相同的目錄,因此 Windows 使用者在使用正確選項時需要小心,否則他們最終會得到 wikibook-ada-1_2_0.src\wikibook-ada-1_2_0。
解壓縮檔案後,您將在 wikibook-ada-1_2_0/Source 中找到所有原始碼。您可以在那裡直接編譯它們。為了方便起見,我們還為以下 IDE 提供了現成的專案檔案(如果您發現某個未命名的 IDE 的目錄,它可能正在製作中,實際上可能無法使用)。
Alire 是在 Windows、macOS 或 Linux 上編譯示例程式碼的最簡單方法。使用 Alire,您甚至不需要下載和解壓縮原始碼,因為 Alire 會為您完成所有操作。在 安裝 Alire 本身 之後,您需要做的就是在終端或 CMD 視窗中執行以下命令。
alr get "wikibook"
ⓘ Deploying wikibook=1.0.1...
############################################################################################################################################################################################# 100.0%############################################################################################################################################################################################# 100.0%
wikibook=1.0.1 successfully retrieved.
ⓘ Found 2 nested crates in /Work/wikibook_1.0.1_780ee70f:
basic/basic=1.0.1: Samples for WikiBook Ada Programing: Basic Ada
pragmas_restrictions/pragmas_restrictions=1.0.1: Samples for WikiBook Ada Programing: Pragmas Restrictions
Dependencies were solved as follows:
+📦 gnat 13.2.1 (new,gnat_native,binary)
這將按章節順序下載所有示例。然後,例如,要構建並執行 基本 Ada 章節中的第一個示例程式碼,您需要輸入以下命令。
cd "wikibook_1.0.1_780ee70f/basic"
alr build
bin/hello_word_1
ⓘ Synchronizing workspace...
Dependencies automatically updated as follows:
+📦 gnat 13.2.1 (new,gnat_native,binary)
ⓘ Building basic=1.0.1/basic.gpr...
Setup
[mkdir] object directory for project Basic
[mkdir] exec directory for project Basic
Compile
[Ada] hello_world_1.adb
[Ada] hello_world_2.adb
[Ada] hello_world_3.adb
Bind
[gprbind] hello_world_1.bexch
[gprbind] hello_world_2.bexch
[gprbind] hello_world_3.bexch
[Ada] hello_world_1.ali
[Ada] hello_world_2.ali
[Ada] hello_world_3.ali
Link
[link] hello_world_1.adb
[link] hello_world_2.adb
[link] hello_world_3.adb
✓ Build finished successfully in 0.90 seconds.
Hello World!
您將在 wikibook-ada-2_0_0/GNAT 中找到多目標 GNAT 專案檔案和多 make Makefile 檔案。對於 i686 Linux 和 Windows,您可以使用以下命令編譯任何演示。
gnat make -P project_file
您也可以使用以下命令在 GPS 中開啟它們。
gps -P project_file
對於其他目標平臺,則會稍微複雜一些,因為您需要告訴專案檔案您要建立哪個目標。可以使用以下選項
- 樣式 ("Debug", "Release")
- 您可以定義是否想要除錯版本或釋出版本,以便您可以比較這些選項如何影響大小和速度。
- 作業系統 ("Linux", "OS2", "Windows_NT", "VMS")
- 選擇您的作業系統。由於 OS/2 上沒有 Ada 2005 可用,因此不要指望所有示例都能編譯。
- 目標 ("i686", "x86_64", "AXP")
- 選擇您的 CPU——"i686" 是任何形式的 32 位 Intel 或 AMD CPU,"x86_64" 是一個 64 位 Intel 或 AMD CPU,如果您有 "AXP",那麼您就知道它是什麼。
請記住按顯示的格式輸入所有選項。要編譯 x86-64 Linux 上的除錯版本,您需要輸入以下命令。
gnat make -P project_file -Xstyle=Debug -Xos=Linux -Xtarget=x86_64
如開頭所說,還有一個可用的 makefile,它會自動確定使用的目標。因此,如果您有 GNU make,則可以使用以下命令節省大量輸入。
make project
甚至可以使用以下命令
make all
一次性製作所有示例的除錯和釋出版本。
每次編譯都儲存在自己的目錄中,該目錄以 wikibook-ada-2_0_0/GNAT/OS-Target-Style 的形式建立。存檔中提供了空目錄。
APEX 使用子系統和檢視目錄結構,因此您需要先建立它們並將原始檔複製到檢視中。在使用您選擇的體系結構模型建立檢視後,使用選單選項“編譯->維護->匯入文字檔案”。在“匯入文字檔案”對話方塊中,新增“wikibook-ada-2_0_0/Source/*.ad?”以從您最初解壓縮到的目錄中選擇 Ada 原始檔。Apex 使用 .1.ada 擴充套件名錶示規範,.2.ada 擴充套件名錶示主體——不用擔心,匯入文字檔案命令會自動更改這些副檔名。
要連結示例,請在目錄檢視器中選擇其主子程式,然後單擊工具欄中的連結按鈕,或從選單中選擇“編譯->連結”。雙擊可執行檔案執行它。您可以使用 Shift 鍵修飾符來繞過連結或執行對話方塊。
以下描述在控制檯視窗中使用 Windows 的 ObjectAda 工具。
在您從命令列使用 ObjectAda 工具之前,請確保PATH環境變數列出包含 ObjectAda 工具的目錄。類似於
set path=%path%;P:\Programs\Aonix\ObjectAda\bin
一個最小的 ObjectAda 專案只需要一個原始檔,例如在以下位置提供的 Hello World 程式
要從這個原始檔構建一個可執行檔案,請按照以下步驟操作(假設當前目錄是一個新的目錄,並且包含上面提到的原始檔)。
- 註冊您的原始檔
X:\some\directory> adareg hello_world_1.adb
這使您的原始碼為 ObjectAda 工具所知。如果您想了解幕後發生的事情,請檢視當前目錄中由 adareg 建立的 UNIT.MAP 檔案。
- 編譯原始檔
X:\some\directory> adacomp hello_world_1.adb Front end of hello_world_1.adb succeeded with no errors.
- 構建可執行程式
X:\some\directory> adabuild hello_world_1 ObjectAda Professional Edition Version 7.2.2: adabuild Copyright (c) 1997-2002 Aonix. All rights reserved. Linking... Link of hello completed successfully
請注意,您為adabuild指定了主單元的名稱,而不是原始檔的名稱。在本例中,它是 Hello_World_1,如
procedureHello_World_1is
有關這些工具的更多資訊,請參閱與 ObjectAda 工具一起安裝的使用者指南使用命令列介面。
- GNAT 線上文件
- DEC Ada
- OpenVMS 上開發 Ada 產品 (PDF)
- DEC Ada — 語言參考手冊 (PDF)
- DEC Ada — 執行時參考 (PDF)
