快速业务通道

自动创建makefile

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-24

当多个源文件存在依赖关系时,在linux下我们通常会写一个Makefile.但要写一个规范的符合gnu规则的Makefile并不容易,幸亏有automake和autoconf这两个工具.嘿嘿!就让我们开始吧

以下以三个文件file1.c file2.c file2.h为例子讲解linux下Makefile的自动生成过程.

file1.c


[root@localhost temp]# cat file1.c
#include <stdio.h>
#include "file2.h"
int main(void)
{
printf("print file1$$$$$$$$$$$4\n");
file2print();
return 0;
}
file2.c


[root@localhost temp]# cat file2.c
#include <stdio.h>
#include "file2.h"
void file2print()
{
printf("print file2************************\n");
}
file2.h


[root@localhost temp]# cat file2.h
#ifndef FILE2_H_
#define FILE2_H_
#ifdef __cplusplus
extern "C"
{
#endif
void file2print();
#ifdef __cplusplus

}
#endif
#endif

第一步:安装automake和autoconf这两个工具.yum install automake ;yum install autoconf.

第二布:将三个源文件放到一个工程目录(以/helloworld为例)进入目录中执行autoscan命令.会生成一个autoscanf.log 和configure.scan;

第三步:将configure.scan 改名为configure.in(configure.scan 是configure.in的原型文件,configure.in 是autoconf的脚本配置文件.在下面我们会用到)


[root@localhost temp]# cat configure.in
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(helloworld, 1.0) #工程名字和版本号,一个bug-report-address省略了
AM_INIT_AUTOMAKE(helloworld,1.0) #工程名字和版本号,这一行要手动添加哦!!!!
AC_CONFIG_SRCDIR([file2.h]) #一般不用修改,用来检测源码文件是否存在,确认目录的有效性
AM_CONFIG_HEADER([config.h]) #用于生成config.h以便下面的autoheader使用.


# 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) #定义输出为Makefile.

第四步:执行aclocal,autoconf,autoheader注意顺序

第五步:执行automake --add-missing.在执行之前要自己创建一个脚本配置文件Makefile.am.--add-missing此参数会添加一些必要的脚本文件.


[root@localhost temp]# cat Makefile.am
AUTOMAKE_OPTIONS=foreign #有三个参数foreign,gnu,gnits默认gnu.使用foreign只是检查必要的文件而已.
bin_PROGRAMS=helloworld #的可执行程序(工程名)
helloworld_SOURCES=file1.c file2.c file2.h #程序所依赖的文件


第六步:执行./configure命令生成Makefile

以上六步之后Makefile就建好了,以后你就可以用make;make install;make uninstall;make clean;make distclean;make dist这些命令来对这个工程操作.

在任何路径下运行./helloworld都能实现.实际上已经是一个软件了.你可以用make dist来打包你的软件分发给你的同学.很过瘾吧!!




凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号