第2课|开发环境安装与配置

23 阅读7分钟

本课目标

完成本课后,你将能够:

  • 在Windows、macOS或Linux系统上安装完整的Ada开发环境

  • 使用GNAT工具链编译和运行Ada程序

  • 配置适合初学者的代码编辑器或集成开发环境(IDE)

  • 理解Ada项目的文件结构和编译流程

  • 成功编写、编译并运行你的第一个Ada程序


一、认识GNAT工具链

1.1 什么是GNAT?

GNAT(GNU NYU Ada Translator)是Ada语言最广泛使用的开源编译器,基于GCC(GNU Compiler Collection)构建。

历史背景:GNAT最初由纽约大学(NYU)在1992-1994年间开发,1995年成为GNU项目的一部分。如今由AdaCore公司主导维护,同时社区版完全免费。

GNAT包含的核心工具:

工具命令用途
GNAT编译器gnatmake / gcc -c编译Ada源文件
GNAT绑定器gnatbind处理语言运行时依赖
GNAT链接器gnatlink生成可执行文件
GPS/GNATstudiognatstudio集成开发环境(IDE)
GNATcheckgnatcheck代码风格检查
GNATtestgnattest单元测试框架

1.2 选择哪个版本?

Ada标准历经多次修订,GNAT支持情况如下:

Ada版本年份主要特征GNAT支持
Ada 831983初始标准完全支持
Ada 951995面向对象、受控类型完全支持
Ada 20052005接口类型、改进并发完全支持
Ada 20122012契约式编程、方面规范完全支持(本课程使用)
Ada 20222022并行块、改进泛型部分支持(开发中)

本课程统一使用Ada 2012标准,这是目前工业界最成熟、工具链支持最完善的版本。


二、Windows系统安装

2.1 下载GNAT社区版

访问AdaCore官方下载页面:

www.adacore.com/download

选择 "GNAT Community" → "2021"(或更新版本)→ "x86_64-windows"

注意:GNAT Community 2021是最后一个完全免费的社区版,后续版本需注册AdaCore账户。对于学习完全够用。

2.2 安装步骤

1.运行安装程序,选择安装路径(建议默认 C:\GNAT\2021

2.选择组件(建议全选):

  • GNAT Ada Compiler

  • GNAT Programming Studio (GPS)

  • GDB Debugger

  • Ada Reference Manual

3.完成安装,勾选"Add to PATH"

2.3 验证安装

打开命令提示符(CMD)或PowerShell,输入:

gnat --version

应显示类似输出:

GNAT 11.2.0 (x86_64-w64-mingw32)
Copyright (C) 1996-2021, Free Software Foundation, Inc.

再验证GPS安装:

gnatstudio --version

三、macOS系统安装

3.1 使用Homebrew安装(推荐)

macOS用户建议通过Homebrew安装,更简单且易于管理:

# 安装Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装GNAT
brew install gnat

# 安装GPS(可选,较大)
brew install --cask gnatstudio

3.2 验证安装

gnat --version
which gnatmake

四、Linux系统安装

4.1 Ubuntu/Debian

sudo apt update
sudo apt install gnat gnat-gps

4.2 Fedora/RHEL/CentOS

sudo dnf install gcc-gnat
sudo dnf install gnatcoll-gps  # GPS IDE

4.3 Arch Linux

sudo pacman -S gcc-ada
sudo pacman -S gnatstudio      # AUR

4.4 验证安装

gnat --version
gnatmake --version

五、配置代码编辑器

5.1 方案一:GNAT Programming Studio(GPS)

GPS是AdaCore官方IDE,专为Ada优化,功能包括:

  • 语法高亮与代码折叠

  • 智能跳转与自动补全

  • 集成调试器(GDB)

  • 项目向导与构建管理

启动方式:

  • Windows:开始菜单 → GNAT → GPS

  • macOS/Linux:终端输入 gnatstudio

首次启动配置:

1.选择主题(推荐"Dark"或"Light")

2.配置字体(推荐等宽字体如Consolas、JetBrains Mono)

3.启用行号显示: Edit → Preferences → Editor → Display → Line numbers


5.2 方案二:VS Code + 插件

VS Code轻量且插件丰富,适合习惯现代编辑器的开发者。

推荐插件:

插件名功能安装命令
Ada & SPARK语法高亮、跳转、格式化扩展商店搜索安装
Ada Debug调试支持配合Native Debug插件

配置tasks.json(按 Ctrl+Shift+P → "Tasks: Configure Task"):

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build Ada",
            "type": "shell",
            "command": "gnatmake",
            "args": ["-g", "-O0", "${file}"],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "Run Ada",
            "type": "shell",
            "command": "${fileDirname}/${fileBasenameNoExtension}",
            "dependsOn": "Build Ada"
        }
    ]
}

5.3 方案三:Vim/Neovim

适合终端爱好者,配置 ~/.vimrc

" Ada语法高亮(通常内置)
autocmd BufRead,BufNewFile *.adb,*.ads set filetype=ada

" 编译快捷键
autocmd FileType ada nnoremap <F5> :!gnatmake -g -O0 %<CR>
autocmd FileType ada nnoremap <F9> :!./%:r<CR>

六、你的第一个Ada程序

6.1 创建项目目录

mkdir ~/ada_learning
cd ~/ada_learning
mkdir lesson_02
cd lesson_02

6.2 编写Hello World

创建文件 hello.adb注意扩展名是.adb,代表Ada Body):

-- 文件名: hello.adb
-- 这是一个简单的Ada程序,演示基本结构

with Ada.Text_IO;  -- 引入标准输入输出包

procedure Hello is
   -- 这是声明部分,此处为空
begin
   -- 这是执行部分
   Ada.Text_IO.Put_Line ("Hello, Ada World!");
end Hello;

代码解析:

部分说明
--Ada的注释符,从 -- 到行尾都是注释
with Ada.Text_IO;with子句,引入外部包(类似 #includeimport
procedure Hello is定义名为Hello的过程(无返回值的子程序)
is分隔声明部分与执行部分
bagin执行部分开始
Ada.Text_IO.Put_Line (...)调用Text_IO包的Put_Line过程,输出字符串并换行
end Hello;程序结束,必须与过程名匹配

Ada命名规范:过程名 Hello 采用PascalCase(首字母大写),包名 Ada.Text_IO 采用点分命名空间


6.3 编译程序

在终端执行:

gnatmake hello.adb

gnatmake会自动完成以下步骤:

1.编译 hello.adb → 生成 hello.o (目标文件)

2.绑定(bind)→ 处理运行时依赖

3.链接(link)→ 生成可执行文件 hello (Windows为 hello.exe

成功输出:

gcc -c hello.adb
gnatbind -x hello.ali
gnatlink hello.ali

6.4 运行程序

Linux/macOS

./hello

Windows

hello.exe

输出

Hello, Ada World!

6.5 清理编译产物

gnatclean hello

或手动删除:

  • hello.o (目标文件)

  • hello.ali (Ada库信息文件,用于依赖分析)

  • hellohello.exe (可执行文件)


七、理解Ada文件扩展名

扩展名全称用途示例
.adbAda Body包体或主程序的实现hello.adb , stack.adb
.adsAda Spec包的规范(接口声明)stack.ads , math_utils.ads
.aliAda Library Information编译器生成的依赖信息hello.ali (自动生成)
.o/.objObject File目标文件(机器码)hello.o (自动生成)

关键规则

  • 主程序(含 procedure 且无参数)通常放在 .adb 文件

  • 包规范(接口)与包体(实现)分离,分别用 .ads.adb

  • 文件名必须与单元名完全一致(包括大小写,但Ada不区分大小写)


八、常见错误与解决

8.1 错误1:文件名不匹配

现象

gnatmake Hello.adb

输出: error: "hello.adb" and unit name "Hello" do not match

原因:Linux/macOS区分大小写,文件名必须严格匹配单元名。

解决:统一使用小写文件名,如 hello.adb


8.2 错误2:缺少分号

代码

procedure Bad is
begin
   Ada.Text_IO.Put_Line ("Oops")  -- 缺少分号!
end Bad;

错误信息

bad.adb:4:01: ";" expected

解决:Ada语句以分号结束, Put_Line 是过程调用语句,必须加 ;


8.3 错误3:end后缺少单元名

代码

procedure Wrong is
begin
   null;
end;  -- 缺少 "Wrong"

错误信息

wrong.adb:4:04: missing "Wrong" in "end"

解决:Ada强制要求 end 后重复单元名,增强可读性。


8.4 错误4:字符串使用错误引号

错误代码

Ada.Text_IO.Put_Line ('Hello');  -- 单引号错误!

解决:Ada中字符串用双引号 " ,单引号 ' 用于单个字符,如 'A'


九、进阶:多文件项目结构

9.1 创建规范文件(.ads)

创建 greetings.ads

-- 文件名: greetings.ads
-- 包规范:声明接口

package Greetings is
   procedure Say_Hello;
   procedure Say_Goodbye;
end Greetings;

9.2 创建包体文件(.adb)

创建 greetings.adb

-- 文件名: greetings.adb
-- 包体:实现规范中声明的子程序

with Ada.Text_IO;

package body Greetings is

   procedure Say_Hello is
   begin
      Ada.Text_IO.Put_Line ("Hello from package!");
   end Say_Hello;

   procedure Say_Goodbye is
   begin
      Ada.Text_IO.Put_Line ("Goodbye from package!");
   end Say_Goodbye;

end Greetings;

9.3 修改主程序

修改 hello.adb

with Greetings;  -- 引入自定义包

procedure Hello is
begin
   Greetings.Say_Hello;
   Greetings.Say_Goodbye;
end Hello;

9.4 编译多文件项目

gnatmake hello.adb

gnatmake会自动:

1.发现 hello.adb 依赖 greetings

2.编译 greetings.ads (检查规范)

3.编译 greetings.adb (生成包体)

4.编译 hello.adb

5.链接生成可执行文件


十、本课总结

  • GNAT是Ada的主流开源编译器,包含编译、链接、调试完整工具链

  • 安装方式:Windows用安装包,macOS用Homebrew,Linux用包管理器

  • 开发环境:GPS是官方IDE,VS Code适合轻量开发,Vim适合终端

  • 文件类型.adb (包体/主程序)、 .ads (包规范)、 .ali (编译信息)

  • 编译命令gnatmake 文件名.adb 一键完成编译链接

  • 关键规范:文件名与单元名匹配, end 后重复单元名,语句用分号结束


十一、课后练习

1.环境验证:确认 gnat --version 能正常输出,截图保存。

2.修改程序:将 hello.adb 改为输出你的姓名和当前日期。

3.故意犯错:尝试去掉 end Hello 中的 Hello ,观察错误信息并理解。

4.扩展包:在 greetings 包中添加 Say_Time 过程,输出"Current lesson: 2"。

5.查阅手册:在GPS中按 F1 或访问 Help → Ada Reference Manual ,查找 Ada.Text_IO 包的规范。


十二、下节预告

第3课|第一个Ada程序:Hello World深入解析

我们将:

  • 深入剖析 procedure 的完整语法结构

  • 理解 with 子句的多种用法和限制

  • 学习Ada的标识符命名规则和保留字

  • 掌握程序注释的最佳实践和文档生成工具


关键术语表

GNAT:GNU NYU Ada Translator,Ada语言的开源编译器

GPS/GNATstudio:AdaCore开发的集成开发环境

adb/ads:Ada Body(包体)和Ada Spec(规范)的文件扩展名

ALI文件:Ada Library Information,编译器用于依赖跟踪的元数据

gnatmake:GNAT的自动化构建工具,处理多文件编译依赖


提示警告:本课程内容(包括但不限于文字、图片、音频、视频等)版权归原作者所有,未经授权严禁转载、复制、翻录、传播或以任何方式用于商业用途。本课程仅供个人学习使用,请尊重知识产权,共同维护良好的创作环境。如有疑问或需授权合作,请联系版权方。感谢您的理解与支持!