acmkdir的hello_world例子
当你开始一个新的项目时,你需要做过多的配置才能使用GNU构建系统。 正如 维护文档文件 中描述的,你需要安装文档。 还需要像 在子目录中组织你的工程 中一样设置你的目录结构。 在进行永无止境的自动化的探索过程中,你可以使用'acmkdir'这个工具来自动完成这些操作。
在shell中敲入下面这条命令来开始使用acmkdir:
% acmkdir hello
'acmkdir'会要求你输入程序的名字、你的名字和邮箱地址。 输入完后,acmkdir会问你是否真的要继续。敲'y'。 然后,'acmkdir'会为你做下面的操作:
- 创建hello-0.1目录和doc、m4和src子目录。
- 生成下面的configure.in文件:
AC_INIT AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(test,0.1) AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB AC_OUTPUT(Makefile doc/Makefile m4/Makefile src/Makefile)
默认情况下,C和C++编译器都被初始化了。如果你没有计划使用C++,可以把'AC_PROG_CXX'这一行去掉。 你可以按照你的需要编辑该文件。 特别地,每次发布新版本时,你都需要更新'AM_INIT_AUTOMAKE'中的版本号(参阅 处理版本号 )。 你还需要确保在'AC_OUTPUT'中列出子目录中的所有Makefile.am。 - 在顶层目录和doc、m4和src目录中都放入样板Makefile.am 。顶层的Makefile.Automake包括:
EXTRA_DIST = reconf configure SUBDIRS = m4 doc src
在src和doc子目录中的Makefile.am是空的。在m4中的Makefile.am包含一个模板Makefile.am文件,如果你需要添加新的 Autoconf 宏,就可以修改这个文件。(FIXME: Crossreference) - 创建COPYING、 INSTALL、 AUTHORS、 NEWS、 README、 THANKS和ChangeLog文件并为它们生成默认内容。 这些内容你在后面开发软件的时候也可以修改它们。(参阅 维护文档文件 )
- 创建一个reconf脚本,每次你修改configure.in文件后,都可以使用它来重新配置你的软件包。
执行reconf脚本在顶层目录执行下面的shell命令:
% rm -f config.cache % rm -f acconfig.h % aclocal -I m4 % autoconf % acconfig % autoheader % automake -a
在'acmkdir'退出前,它会为您调用一次'reconf'脚本。
这个时候,就可以执行:
% ./configure % make
但是不会有什么事情发生,因为这时软件都是空的。
添加一个简单的hello world程序,你需要添加下面的两个文件:
- src/Makefile.Automake
bin_PROGRAMS = hello hello_SOURCES = hello.c
- src/hello.c
#if HAVE_CONFIG_H # include <config.h> #endif #include <stdio.h> int main () { printf ("Hello world\n"); }
接下来在顶层目录执行下面的命令来编译程序并打包分发:
% ./reconf % ./configure % make % make distcheck
就是这么简单。
一般来说,使用GNU构建系统开发简单的程序,你可以使用'acmkdir'来配置工程目录树。 你只需要写源代码,放入必须的Makefile.am,然后更新configure.in文件就可以了。 实际上,这个时候你基本上知道了所有你需要知道的关于开发源代码分发、编译和安装简单C程序的知识。 所有你需要做的只是,写源代码,然后把源代码文件在'*_SOURCES'中列出来就可以了。
在接下来的章节中,我们将会解释更多有关使用GNU构建系统开发遵循GNU代码标准软件的相关细节。