Linux系统入门教程:使用Eclipse和Gnu Autotools管理C/C++项目


在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get、yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法。但是长期混迹于 Unix/Linux 世界的童鞋们都知道,从源代码自行编译安装软件并不是那么的难,一般都是这样三个步骤:

configure
make
make install

  之所以能够把源代码的构建管理得如此简单,这得益于 Gnu 的 Autotools 工具链。在上面的三个命令中,configure 是一个脚本,它的功能很强大,可以探测系统环境,比如探测出系统中的编译工具版本、标准库版本以及其它需要依赖的工具,生成一个Makefile,而后面的 make 和 make install 就根据刚生成的 Makefile 进行软件的编译和安装。看似很简单,但事实上 Autotools 工具链非常复杂,复杂到我多少次想学习这些工具都望而却步。直到我遇到 Eclipse。

  先来说说 Gnu Autotools,关于该工具链的使用方法网上有很多的博文,我这里来一张图片先:

  可以看到,Gnu Autotools 包含了 autoscan、aclocal、automake、autoconf、autoheader 等工具,而且还涉及一门非常古老的宏语言 m4 。其工作原理是这样的,先由 autoscan 对源码进行扫描,生成一个 Configure.scan 文件,然后用户对该文件进行编辑,生成 configure.in 文件。用户还要编写一个文件,那就是 Makefile.am 文件。然后 automake 对 Makefile.am 和 configure.in 文件进行处理,生成 Makefile.in 文件,而 autoconf 工具对 configure.in 进行处理,生成 configure 脚本, autoheader 工具对 configure.in 文件进行处理,生成 config.h.in 文件。至此,Autotools 工具的使命完成,生成的这些文件可以交付给用户使用了。用户拿到源码包后,运行 configure 脚本,该脚本会处理 Makefile.in 文件,生成最后的 Makefile,同时处理 config.h.in 文件,生成 config.h 文件。有了 Makefile,用户就可以使用 make 和 make install 编译和安装该软件了。

  那么 aclocale 命令干啥用呢?这是因为 configure.in 文件中包含了大量的 m4 宏,这些宏最终都会展开为各种各样的 Shell 代码,用来探测系统环境。但是这些宏的定义往往散布在系统的各个角落,aclocale 命令就是将这些用到的宏收集到一个文件 aclocale.m4 中。

  这个工具链真的是太复杂了,幸好我有 Eclipse。看过我 Java 博客的朋友都知道我是 Eclipse 粉,这里不多说。我们来看看 Ubuntu 的软件源中都有 Eclipse 的哪些包,如下图:

  命令sudo aptitude search eclipse 可以找出软件源中所有包含单词 eclipse 的软件包,但是我要过滤一下,不是以 eclipse 开头的不要,包含“:i386”的也不要,因为我是64位的平台,默认的软件包正适合我,所以就有了后面的 | grep ' eclipse' | grep -v ':' ,最后,再加一个管道,使用 awk 命令只显示第2列,也就是软件包的名字。结果如上图所示。

  从这些结果中可以看出,eclipse-cdt 是用来写 C/C++ 代码的 IDE 环境,而且还有 eclipse-cdt-autotools 包可用,那真的是正中我的下怀。不过我更贪心一点,我想安装所有的这些和 eclipse 相关的包,怎么办?有办法,在上面的命令后面再加上 | xargs echo sudo aptitude install 即可生成一个安装所有这些包的命令。我把生成的结果重定向到一个脚本文件,给该脚本文件加上执行权限,然后运行它,如下图:

  回答一个“y”,就耐心地等待 eclipse 的安装吧。安装完成后,启动 eclipse ,新建项目的时候就可以选择 C++ 项目了,如下图:

  点下一步,是如下界面:

  可以看到有很多种项目类型可以选择,Eclipse 既可以使用它自己的项目文件管理 C/C++ 项目,也可以使用 Makefile 管理项目,当然,我们这里选择使用 Gnu Autotools 管理项目,而且选择简单的“Hello World”示范项目。点下一步,如下图:

  输入一些项目相关的信息,再继续点下一步,如下图:

  如果点那个“Advanced settings”按钮,还可以对 Gnu Autotools 工具链进行更详细的设置。如下图:

更多详情见请继续阅读下一页的精彩内容:

 

------------------------------分割线------------------------------

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

将C语言梳理一下,分布在以下10个章节中:

  1. Linux-C成长之路(一):Linux下C编程概要
  2. Linux-C成长之路(二):基本数据类型
  3. Linux-C成长之路(三):基本IO函数操作
  4. Linux-C成长之路(四):运算符
  5. Linux-C成长之路(五):控制流
  6. Linux-C成长之路(六):函数要义
  7. Linux-C成长之路(七):数组与指针
  8. Linux-C成长之路(八):存储类,动态内存
  9. Linux-C成长之路(九):复合数据类型
  10. Linux-C成长之路(十):其他高级议题
  • 1
  • 2
  • 下一页

相关内容