免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1119 | 回复: 0
打印 上一主题 下一主题

符合GUN惯例的Makefile生成 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-13 11:49 |只看该作者 |倒序浏览
--最近工作中遇到需要生成符合自由软件惯例的Makefile的问题.学习总结以便备用
.MSN:datouqingting@163.com
--

一般大家写makefile都是怎么方便怎么写,很少考虑符合什么规范. autoconf和automake这两个工具可以方便的自动生成符合GUN规范的Makefile.这样就可以象普通的GUN软件一样执行"./configure"生成Makefile,"make","make install"来安装.

一.Makefile简介
  Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
  Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。

二.详细过程
1.在你的工作目录下建一个hello目录,我们用它来存放hello程序及相关文件
$ mkdir hello
$ cd hello

2.编辑源程序,假定文件名叫"hello.c"
int main(int argc, char** argv)
{
printf("Hello, GUN Makefile\n");
return 0;
}

3.生成configure
  1> 使用autoconf命令来帮助我们根据目录下的源代码生成一个configure.in的模板文件.
$ autoscan
$ ls
configure.scan hello.c
  2> 将configure.scan改名为configure.in,按下面的内容修改,去掉无关的语句:
====================configure.in内容开始===================
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello, 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.
AC_OUTPUT(Makefile)
=============configure.in内容结束===========

  3> 执行命令aclocal和autoconf,分别会产生aclocal.m4及configure两个文件:
$ aclocal
$ autoconf
$ ls
aclocal.m4 autom4te.cache configure configure.in hello.c
  4> 新建Makefile.am文件
     内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
helloworld_SOURCES=hello.c
     
  5> automake会根据你写的Makefile.am来自动生成Makefile.in。
$automake  --add-missing
configure.in: installing `./install-sh'
configure.in: installing `./mkinstalldirs'
configure.in: installing `./missing'
Makefile.am: installing `./depcomp'
$ls
aclocal.m4 autom4te.cache configure configure.in hello.c makefile.am makefile.in
  6> 执行configure生成Makefile
$./configure
$ls
aclocal.m4 autom4te.cache configure configure.in hello.c makefile makefile.am makefile.in
到此为止,一个符合GUN规范的Makefile就完成了.
三.工具和命令的有关知识
1.autoscan
autoscan是用来扫描源代码目录生成configure.scan文件的。autoscan可以用目录名做为参数,但如果你不使用参数的话,那么autoscan将认为使用的是当前目录。autoscan将扫描你所指定目录中的源文件,并创建configure.scan文件
2.acloacl
aclocal是一个perl 脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。
3.autoconf
autoconf是用来产生configure文件的。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。
AC_INIT(FILE) 这个宏用来检查源代码所在的路径
AM_INIT_AUTOMAKE(PACKAGE, VERSION)这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本号:PACKAGE是软件包的名字,VERSION是版本号。当你使用make dist命令时,它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对应的软件包的名字和版本号
AC_PROG_CC  这个宏将检查系统所用的C编译器
AC_OUTPUT(FILE) 这个宏是我们要输出的Makefile的名字


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2260/showart_199482.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP