linux下的C语言开发(自动编译工具)

来源:互联网 发布:冰箱品牌 知乎 编辑:程序博客网 时间:2024/03/29 15:04

在Linux下面,编写makefile是一件辛苦的事情。因此,为了减轻程序员编写makefile的负担,人们发明了autoconf和automake这两个工具,可以很好地帮我们解决这个问题。
    我们可以通过一个简单的示例来说明如何使用配置工具。

有一个小点,不明白的记录下:(与下面程序无关)

rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。



下面我不能得到正确的结果,请参照http://www.cnblogs.com/Safe3/archive/2009/02/10/1387460.html,这个我试过是正确的。
(1)首先,编写源文件hello.c。

[cpp] view plaincopy
  1. #include <stdio.h>  
  2.   
  3. int main(int argc, char** argv[])  
  4. {  
  5.     printf("hello, world!\n");  
  6.     return 1;  
  7. }  
(2)接下来,我们需要创建一个Makefile.am,同时编写上脚本。
[cpp] view plaincopy
  1. SUBDIRS=  
  2.   
  3. bin_PROGRAMS=hello  
  4. hello_SOURCES=hello.c    

(3)直接输入autoscan,生成文件configure.scan,再改名为configure.in。

修改脚本AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
为AC_INIT(hello, 1.0, feixiaoxing@163.com)

同时,在AC_CONFIG_HEADER([config.h])后面添加
AM_INIT_AUTOMAKE(hello, 0.1)

(4)依次输入aclocal命令、autoheader命令

(5)创建4个文件,分别为README、NEWS、AUTHORS和ChangeLog

(6)依次输入automake -a、autoconf命令

(7)输入./configure,生成最终的Makefile

(8)如果需要编译,输入make;如果需要安装, 输入make install;如果需要发布软件包,输入make dist

更详细的一个例子:

当多个源文件存在依赖关系时,在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来打包你的软件分发给你的同学。很过瘾吧!!


原创粉丝点击