博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
automake之简单的例子
阅读量:5168 次
发布时间:2019-06-13

本文共 1981 字,大约阅读时间需要 6 分钟。

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。

  在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make install”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。

本文构建的工程架构为:

sheepdog 

----sheep

      -----sheep.c

1.在sheepdog/sheep/目录下创建一个sheep.c,其内容如下:

#include <stdio.h>

int main(int argc, char** argv)
{
    printf("Hello, Auto Makefile!\n");
    return 0;
}

2.运行autoscan,自动创建两个文件:autoscan.log和configure.scan

3.修改configure.scan的文件名为configure.ac(或者configure.in),然后将内容改为如下:

# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.68])

AC_INIT([sheepdog], [1.0], [zhang_zhang@live.com])

# 用来侦测所指定的源码文件是否存在,来确定源码目录的有效性

AC_CONFIG_SRCDIR([sheep/sheep.c])

# 用于生成config.h文件,以便autoheader使用

AC_CONFIG_HEADERS([config.h])

AM_INIT_AUTOMAKE([sheepdog], [1.0])

# Checks for programs.

AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

# 创建输出文件。在`configure.in'的末尾调用本宏一次。

AC_OUTPUT([Makefile sheep/Makefile])

 

需要注意的是红色的部分,1.AM_INIT_AUTOMAKE是必须添加的东西,2.每个文件夹都需要生成Makefile文件

4. 运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义

5. 运行 autoconf, 目的是生成 configure

6. 运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件

7. 在sheedog和sheep目录分别创建Makefile.am,其内容分别为:

    SUBDIRS= sheep

    AUTOMAKE_OPTIONS=foreign

    bin_PROGRAMS=sheep

    sheep_SOURCES=sheep.c

其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附 带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用 户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。

8. 运行automake --add-missing

9. 运行configure

10. make && make install

11.在sheepdog/sheep目录下就可以运行sheep了

9. 运行 touch NEWS README AUTHORS ChangeLog

转载于:https://www.cnblogs.com/zhangzhang/archive/2013/01/04/2843781.html

你可能感兴趣的文章
ZigZag Conversion
查看>>
svn图标不显示的解决方案
查看>>
javascript中的表结构
查看>>
javascript使用栈结构将中缀表达式转换为后缀表达式并计算值
查看>>
一些 CSS 框架
查看>>
5.13 工作笔记
查看>>
Unicode和多字节字符集 (MBCS) 杂谈
查看>>
left 和 margin-left
查看>>
WOW! I have a TOFEL BLOG!
查看>>
PAT (Basic Level) Practise (中文)- 1016. 部分A+B (15)
查看>>
应用程序利用回调向表现层实时推送数据
查看>>
网络编程-UDP
查看>>
[JAVA] Tcp客户端和服务器简单代码
查看>>
管道和FIFO 二
查看>>
JAVA Synchronized (三) volatile 与 synchronized 的比较
查看>>
UIView的layoutSubviews和drawRect方法何时调用
查看>>
Android事件分发机制浅析(2)
查看>>
在html中展示pdf
查看>>
.net托管代码和非托管代码的精要理解
查看>>
用记事本写第一个Java程序
查看>>