免费注册 查看新帖 |

Chinaunix

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

用autotools制作Makefile 和configure文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-30 10:00 |只看该作者 |倒序浏览

                                网上有一些制作Makfile的文章,只停留在Makefile而已。用autotools的工具相对来说要简单的多,其它一些介绍autotools文章又有很多漏洞,而且步骤烦琐。
制作一个最简单的helloworld程序:
现有目录test
mkdir src 建立src目录存放 源代码
在src下。
编辑hello.c文件
代码:
#include
int main()
{
        printf("hello world\n");
        return 0;
}
在src目录下建立Makefile.am文件 (src/Makefile.am)
代码:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.c
hello_LDADD = -lpthread (只是测试,实际不需要连接该库)
保存退出
退到test目录
编辑Makefile.am文件 (Makefile.am)
SUBDIRS = src
退出保存
然后
执行
autoscan
生成configure.scan文件
按此编辑此文件
代码:
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(hello,1.0, [miaoquan@nou.com.cn])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/hello.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lpthread':
AC_CHECK_LIB([pthread], [main])
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
#AC_CONFIG_FILES([Makefile
#                 src/Makefile])
AC_OUTPUT(Makefile src/Makefile)
退出保存
将此文件更名 mv configure.scan configure.in
然后执行
touch NEWS README AUTHORS ChangeLog
然后执行
autoreconf -fvi
至此生成configure文件
执行configure文件
生成Makefile文件
make
make install
make uninstall
make dist
试验一下吧。
继续完善这个例子,论坛里有人问,如何生成静态库,并连接.
完善hello.c这个例子
当前目录
|- src 目录
|- hello.c 文件
|- include 目录
|- hello.h文件
|- lib 目录
|- test.c文件 此文件用来生成 libhello.a
在当前目录 编写Makefile.am
代码:
SUBDIRS = lib src
在include目录下 编写hello.h
代码:
extern void print(char *);
在lib目录下编写test.c
代码:
#include
void print(char *msg)
{
        printf("%s\n",msg);
}
在lib目录下编写Makefile.am
代码:
noinst_LIBRARIES=libhello.a
libhello_a_SOURCES=test.c
这里noinst_LIBRARIES 的意思是生成的静态库 ,不会被make install 安装
然后指定libhello.a的源文件test.c
在src目录下编写hello.c
代码:
#include "hello.h"
int main()
{
        print("haha");  //这里是静态库里的print函数
        return 0;
}
在src目录下编写Makefile.am
代码:
INCLUDES= -I../include
bin_PROGRAMS=hello
hello_SOURCES=hello.c
hello_LDADD=../lib/libhello.a
首先指定头文件的位置 ../include
然后指定要生成执行文件 hello
然后指定源代码文件 hello.c
最后添加静态库的位置 ../lib/libhello.a
按照我首篇帖子的方式.
执行autoscan 生成configure.scan
修改该文件
按照首篇帖子修改.
然后不同之处
需要添加一行:AC_PROG_RANLIB
代码:
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(hello,1.1,[miaoquan@nou.com.cn])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/hello.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
AC_PROG_RANLIB
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
#AC_CONFIG_FILES([Makefile
#                lib/Makefile
  #               src/Makefile])
AC_OUTPUT([Makefile
                        lib/Makefile
                        src/Makefile])
mv configure.scan configure.in
touch NEWS README AUTHORS ChangeLog
执行autoreconf -fvi
生成configure.执行configure生成Makefile..
后面同上...
总结:
步骤如下:
1. 编辑相应的Makefile.am文件
2. 执行命令autoscan,生成configure.scan文件。
3. 修改configure.in内容。
4. touch NEWS README AUTHORS ChangeLog
5. autoreconf -fvi
6. ./configure make


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP