Emacs发行版目录结构和关注重点

本文介绍了Emacs 24.2版本的下载方式及压缩格式变化,并详细展示了其目录结构,重点解析了src和lisp目录的作用,揭示了Emacs的工作原理。
目前Emacs最新版是24.2,官网或者镜像里有下载源码的。除了传统的bzip2和gzip压缩,新版有了xz扩展名的压缩格式,据说是LZMA的,果然压缩率比较高。Linux下一般直接支持xz格式,tar的-J选项(大写J)支持直接解压tar.xz格式的文件。我下载的是这种高压缩率的格式:

tar xvJf emacs-24.2.tar.xz

解压后会出现emacs-24.2文件夹,有如下目录结构

. ├── aclocal.m4 // autotools编译系统所用文件 ├── admin // 文件夹:底下是一些开发者可能用的着的工具和脚本,不是通用工具 ├── BUGS // 存在的bug ├── build-aux // 文件夹:编译系统所用辅助脚本 ├── ChangeLog // 版本的更新 ├── config.bat // 用于DOS的配置脚本 ├── configure // autotools编译系统配置脚本 ├── configure.in // autotools配置输入 ├── COPYING // 版权信息 ├── doc // 文件夹:文档,在Emacs内可以直接查看 ├── etc // 文件夹:一些机器无关的文件 ├── info // 文件夹:Emacs的info文档 ├── INSTALL // *nix系统安装说明,Windows和DOS系统安装见nt/INSTALL和msdos/INSTALL ├── leim // 文件夹:Emacs内置输入法的lisp程序和字典等 ├── lib // 文件夹:貌似都是一些通用的C工具函数,可能在大多数编译系统里都有 ├── lib-src // 文件夹:一些Emacs所用的工具程序的源码 ├── lisp // 文件夹:Emacs的lisp源码 ├── lwlib // 文件夹:Lucid Widget库,为早期的X窗口GUI库提供统一观感的控件,已经不怎么用了 ├── m4 // 文件夹:autotools所用文件 ├── make-dist // SHELL脚本,创建一个emacs的发行包(就是我们解压的包) ├── Makefile.in // autotools所用 ├── msdos // 文件夹:DOS系统编译指南和相关的文件 ├── nextstep // 文件夹:Nextstep系统编译指南和相关文件 ├── nt // 文件夹:Windows系统编译指南和相关文件 ├── oldXMenu // 文件夹:过时的X控件库,没有指定新GUI库(GTK+、Motif等)时使用 ├── README // 一般性介绍 ├── site-lisp // 空文件夹 ├── src // 文件夹:Emacs的C部分源码 ├── update-subdirs // SHELL脚本,update-subdirs my-sub,在my-sub/subdirs.el里面写入my-sub的所有子文件夹 └── vpath.sed // autotools所用文件 17 directories, 13 files

其中大部分目录我们是不必要关注的,比较重要的是src和lisp两个目录。其中src是Emacs的C核心部分,lisp是Emacs内置的lisp代码部分。对于研究Emacs的lisp解释器和底层工作,只要使用src底下的就行了。

src只包含了解释器、IO、目录浏览、进程管理、Buffer、Window等的实现,而没有编辑功能。直接编译src可以得到一个temacs的可执行文件。temacs需要加载所有lisp目录中的文件才能形成我们常见的Emacs编辑器,才具有编辑和其他常见功能。但是每次加载都会很慢,因此一般会让temacs加载lisp以后,dump(就是把加载后的状态存储到文件)另外一个可执行文件emacs,这个文件因为含有已经加载的lisp函数,所以启动时不用读取那么多文件并编译执行,所以会快很多,不过它的体积可能比temacs大得多。

如果希望研究Emacs的工作原理,只需要研究src目录下的核心文件,以及lisp目录下挑选一两个包的源码即可。


http://blog.163.com/dingmaotu@126/blog/static/2148430201293072251120/

<think>好的,用户问的是关于GNUGCC的介绍。首先,我需要明确这两个术语的定义它们之间的关系。GNU是一个操作系统项目,而GCC是GNU项目中的编译器套件。 先理清GNU的历史。用户可能想了解GNU的起源,比如由Richard Stallman发起,目标是创建一个自由的操作系统。这里需要提到GNU的全称是“GNU's Not Unix”,说明它类Unix但不同。还要解释GNU项目的组成部分,比如各种工具库,但内核(Hurd)的发展情况可能需要说明。 然后是GCC,即GNU编译器集合。需要介绍它的功能,支持的编程语言,如C、C++、Fortran等。GCC在开源社区的重要性,以及它如何成为许多系统的标准编译器。可能还要提到跨平台特性,优化能力,以及与其他编译器的对比,比如Clang。 用户可能对两者之间的关系有疑问,需要明确GCC是GNU项目的一部分,属于工具链中的关键组件。此外,GNU系统通常使用Linux内核,形成GNU/Linux发行版,这一点可能需要解释,避免混淆。 还要考虑用户的使用场景。如果用户是开发者,可能需要更详细的技术细节,比如GCC的优化选项、支持的架构等。如果是普通用户,重点放在基本概念用途上。 需要检查是否有常见的误解需要澄清,例如GNULinux的区别,GCC是否只能用于GNU系统等。确保回答结构清晰,分点说明,便于用户逐步理解。 最后,确保使用中文,遵循格式要求,数学表达式正确,但这里可能用不到太多数学内容。保持语言简洁,信息准确,帮助用户建立对GNUGCC的整体认识。</think>### GNU GCC 的逐步解释 #### 1. **GNU(GNU's Not Unix)** - **定义** GNU 是由 Richard Stallman 于 1983 年发起的自由软件操作系统项目,目标是创建一个完全自由、与 Unix 兼容但不受 Unix 版权限制的操作系统。 - **核心组成** - **工具链**:包含编译器(如 GCC)、调试器(GDB)、构建工具(Make)等。 - **基础库**:如 GNU C 库(glibc),为系统调用底层功能提供支持。 - **应用软件**:如 Bash(Shell)、Emacs(编辑器)。 - **内核**:原计划使用 GNU Hurd,但因开发缓慢,实际广泛采用 Linux 内核。 - **关键特性** - **自由软件许可**:遵循 GPL(GNU通用公共许可证),确保用户可自由使用、修改、分发代码。 - **兼容性**:设计为与 Unix 系统接口兼容,便于移植现有软件。 - **实际应用** 现代 GNU/Linux 发行版(如 Ubuntu、Debian)是 GNU 工具与 Linux 内核的组合。 --- #### 2. **GCC(GNU Compiler Collection)** - **定义** GCC 是 GNU 项目中的编译器套件,最初仅支持 C 语言(原名 *GNU C Compiler*),现扩展为多语言编译器。 - **支持语言** | 语言 | 用途示例 | |-----------|----------------------------| | C | 系统编程、嵌入式开发 | | C++ | 游戏引擎、高性能计算 | | Fortran | 科学计算、数值模拟 | | Ada | 航空、安全关键系统 | | Go | 云计算、分布式系统 | - **核心功能** - **跨平台编译**:支持 x86、ARM、RISC-V 等架构。 - **优化能力**:通过 `-O1`/`-O2`/`-O3` 等选项实现代码性能优化。 - **标准化**:严格遵循 ISO C/C++ 标准,可通过 `-std=c11` 等标志指定版本。 - **编译流程示例(以 C 语言为例)** ```bash # 分步编译 gcc -E main.c -o main.i # 预处理 gcc -S main.i -o main.s # 生成汇编 gcc -c main.s -o main.o # 生成目标文件 gcc main.o -o program # 链接生成可执行文件 # 一步编译 gcc main.c -o program ``` - **对比其他编译器** | 特性 | GCC | Clang (LLVM) | |------------|---------------|----------------| | 代码优化 | 强(尤其数学计算) | 更快的编译速度 | | 错误提示 | 基础 | 更友好的诊断信息 | | 许可协议 | GPL | Apache 2.0 | --- #### 3. **GNU 与 GCC 的关系** - **依赖关系** GCC 是 GNU 工具链的核心组件,为 GNU 系统提供编译能力。 ```mermaid graph LR A[GNU项目] --> B[GCC] A --> C[Glibc] A --> D[Bash] A --> E[其他工具] ``` - **协作场景** 开发 GNU 软件时,通常使用 GCC 编译代码。例如编译 GNU Coreutils(包含 `ls`、`cp` 等命令): ```bash ./configure && make CC=gcc ``` --- #### 4. **常见问题解答** - **Q:GNU 是操作系统吗?** A:GNU 是操作系统项目,但完整系统需配合内核。实际中 GNU + Linux 内核组成完整 OS。 - **Q:GCC 只能编译 C/C++ 吗?** A:否,支持多语言(如 Fortran、Go),需安装对应前端(例如 `gfortran`)。 - **Q:GCC 在 Windows 上能用吗?** A:可通过 MinGW 或 Cygwin 移植,或使用集成环境(如 MSYS2)。 --- #### 5. **学习资源** - **GNU 官方文档**:https://www.gnu.org - **GCC 手册**:`man gcc` 或在线文档 - **实践建议**:尝试用 GCC 编译简单程序,观察预处理、汇编等中间文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值