Ubuntu16.04下使用autotools生成Makefile

来源:互联网 发布:在淘宝开店流程 编辑:程序博客网 时间:2024/06/15 09:14

.# Ubuntu16.04下使用autotools生成Makefile##

最近在网上买了一本旧书,书名《嵌入式Linux应用程序开发详解》,因为出版的时间是2006年,到现在已经过去十多年,书里的内容有些已经过时,而且书上的环境为Redhat,和我目前使用的系统环境不同(Ubuntu 16.04),因此按照书上第三章实验部分使用autotools生成Makefile过程中遇到了问题,没有生成相应的Makefile。后来参考网上的一些博客,把这个问题解决了,下面就简单叙述一下解决过程,简单分析一下出问题的原因。

使用工具:

  • autoscan

  • aclocal

  • autoconf

  • autoheader

  • automake
    以上的工具就是生成Makefile要用到的autotools。


hello.c

#include "hello.c"int main(){    printf("Hello orld!\n");    return 0;}

hello.h

#include <stdio.h>

将hello.c和hello.h放在同一目录下:
这里写图片描述

下面就介绍生成Makefile的过程,以及注意点。

1、使用autoscan生成configure.scan

直接在目录下运行autoscan:
这里写图片描述
可以看到,运行autoscan后生成了log文件autoscan.log和我们要用到的configure.scan文件。

2、用configure.scan生成configure.ac文件

这里写图片描述
这里写图片描述

3、修改configure.ac文件

这里写图片描述

将configure.ac修改成如下内容:
截图:
这里写图片描述

#                                               -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.69])AC_INIT(hello, 1.0, lijintang1208@vip.qq.com)AM_INIT_AUTOMAKEAC_CONFIG_SRCDIR([hello.c])AC_CONFIG_HEADERS([config.h])# Checks for programs.AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_CONFIG_FILES([Makefile])AC_OUTPUT

以上文件添加了两行内容,分别为第6行:AM_INIT_AUTOMAKE,第21行AC_CONFIG_FILES([Makefile])。
这部分在《嵌入式Linux应用开发详解》上没有讲到,而且书上是将configure.scan文件修改为configure.in文件,如果按照书上的内容来做,后面是不能生成用于生成Makefile的Makefile.in文件的。
还要讲一下第5行AC_INIT行。这行的参数hello代表要生成的程序名,1.0为程序版本号,最后的邮箱一般为bug报告的邮箱,一般为作者邮箱也可不写。

4、运行aclocal

这里写图片描述

可以看到运行后在目录下生成了aclocal.m4文件和autom4te.cache目录。

5、编写Makefile.am文件

这里写图片描述

文件内容:

这里写图片描述

AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=hellohello_SOURCES=hello.c hello.h

6、运行autoheader

这里写图片描述

运行成功后生成config.h.in文件

7、使用touch命令生成automake必须的文件

这里写图片描述

运行成功后生成NEWS、README、AUTHORS和ChangeLog文件。

8、运行automake

这里写图片描述

运行automake -a之后可以看到目录下生成了其他一些文件和目录,其中Makefile.in就是最终生成Makefile的必须文件,如果第三步中不添加两条内容,在这步就不能生成Makefile.in文件也就导致了最后不能生成Makefile文件。

9、运行autoconf

这里写图片描述

运行autoconf之后,目录下生成了可执行文件configure。

10、运行可执行文件configure

这里写图片描述

这里写图片描述

可以看到运行configure文件之后,目录下生成了我们想要的Makefile文件。
下面就验证我们生成的Makefile是否正确。

11、编译代码并运行程序

这里写图片描述

通过make工具编译代码后查看目录下已经生成了hello程序,运行后正常打印hello world!说明使用以上步骤生成的Makefile可以运行。

通过autotools生成的Makefile内容也比自己编写的全面很多,里面有很多的预定义变量,这些变量的含义通常是固定的。


参考文献:

[1]:

http://blog.csdn.net/zhengqijun_/article/details/69952410

[2]: 《嵌入式Linux应用程序开发详解》 孙琼 编著.

原创粉丝点击