使用gnu automake编译helloworld
按照许多介绍automake基本步骤的教程中的说法,我在尝试使用automake编译helloworld示例程序的时候,仍然遇到了几个小坑,所幸后面都解决了。
下面把我的编译步骤给列出来。
1. 创建helloworld目录,进行目录后创建helloworld.c文件:
mkdir helloworld
cd helloworld
vim helloworld.c
helloworld.c的内容如下:
#include <stdio.h>
#include <stdlib.h> //注意:需要添加此两行头文件
int main(int argc, char** argv)
{
printf("Hello, Linux World!\n");
return 0;
}
2. 使用autoscan扫描当前目录,生成configure.scan,将生成的文件修改文件名称为configure.ac(注意:修改后名称不是configure.in),编辑其内容,包括修改AC_INIT行为目标程序名称、版本号、出错向指定邮箱发邮件,在AC_CONFIG_HEADERS行后添加AM_INIT_AUTOMAKE行,修改AC_OUTPUT行。修改后的configure.ac内容如下:
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT(helloworld, 1.0, #########@##.com)
AC_CONFIG_SRCDIR([helloworld.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(main, 1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files. AC_CHECK_HEADERS([stdlib.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile])
3. 在当前目录下创建Makefile.am,内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
main_SOURCES=helloworld.c
注意:此处的bin_PROGRAMS后面的main与AM_INIT_AUTOMAKE括号里面设置项一致即可。
4. 按顺序分别执行aclocal、autoconf、autoheader、automake --add-missing即可。
5. 此时应该可以执行三步曲 ./configure、make、make install操作了。如果不想安装到公共目录中,可以不用运行make install的。
6. 运行./helloworld查看输出结果。
以上只是使用automake中最简单的flat情况的处理步骤。automake按照一个项目的目录结构,可以将编译过程分为三种情况,flat、shallow、deep。至于如何进行后两种情况的处理,真实复杂的项目还会将不同项目、或者使用不同编译选项生成的库文件、可执行文件合并放到指定的目录中,本人仍在努力领悟中。或许可以下载一些开源软件学习它们的configure.ac、Makefile.am里面的技巧也会很不错。