automake自动生成Makefile及遇到的问题

原创 2015年07月08日 23:09:51

大家在Linux下面编写工程时可能都要遇到一个同样的问题,就是工程文件太大了编译的问题。我们可以使用很多方法:

1、       最原始的方法是每次编译都写一次gcc命令。

2、       手写Makefile文件,这个的前提是对Makefile的规则很熟悉。

3、       自动生成Makefile文件。

楼主在项目中也是遇到这样的问题,开始文件少的时候我每次都是键入gcc命令,然后各种参数,后面各种文件。但是当C文件变多之后这就是我的梦魇了。我已经无法忍受下去,有时还会敲错,毕竟我们是人,代码写多了之后头脑没那么清醒。所以我就使用了自动生成Makefile的工具,毕竟自己写Makefile也是毕竟耗时的。

我使用的是autoconf + automake的套装,按照网上我也是实践过,但是网上还有一些没有说到的我这里还是想补充一下。

图示:


楼主的文件目录是这样的:

项目目录下面是:------src:存放.c文件

                               ------include:存放头文件

Makefile自动生成的步骤:
1.     运行autoscan命令
2.     configure.scan 文件重命名为configure.in或者configure.ac,并修改configure.in文件
3.     project目录下新建Makefile.am文件,并在src文件下创建makefile.am文件
4.     运行aclocal命令
5.     运行autoheader,楼主通过这个命令生成config文件,不然不让我往下执行
6.     运行autoconf命令
7.     运行automake –add-missing命令
8.     运行./confiugre脚本

大体上这样就可以生成我们要使用的Makefile文件了,只是步骤中有些地方需要我们修改,是configure.scan。

下面我将引用并添加自己的东西,每个configure.scan文件都是以AC_INIT开头,以AC_OUTPUT结束。我们不难从文件中看出confiugre.in文件的一般布局:

AC_INIT
 测试程序
 测试函数库
 测试头文件
 测试类型定义
 测试结构
 测试编译器特性
 测试库函数
 测试系统调用
AC_OUTPUT

修改后的结果如下:

#                                -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
 
AC_PREREQ(2.59)
AC_INIT(test, 1.0, xxxxx@126.com) #修改
AM_INIT_AUTOMAKE #添加
AC_CONFIG_SRCDIR([src/test.c])
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(test,1.0)
 
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lpthread':
AC_CHECK_LIB([pthread], [pthread_rwlock_init])
AC_PROG_RANLIB
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile
               src/Makefile
               ])
AC_OUTPUT() 

其中要将AC_CONFIG_HEADER([config.h])修改为:AM_CONFIG_HEADER(config.h),并加入AM_INIT_AUTOMAKE(test,1.0)。由于我们的测试程序是基于多线程的程序,所以要加入AC_PROG_RANLIB,不然运行automake命令时会出错。在AC_OUTPUT输入要创建的Makefile文件名。

由于我们在程序中使用了读写锁,所以需要对库文件进行检查,即AC_CHECK_LIB([pthread],[main]),该宏的含义如下:


Makefile.am文件

Makefile.am是一种比Makefile更高层次的规则。只需指定要生成什么目标,它由什么源文件生成,要安装到什么目录等构成。

表一列出了可执行文件、静态库、头文件和数据文件,四种书写Makefile.am文件个一般格式。



我src下面的Makefile.am是这样的:


对于可执行文件和静态库类型,如果只想编译,不想安装到系统中,可以用noinst_PROGRAMS代替bin_PROGRAMS,noinst_LIBRARIES代替lib_LIBRARIES。

这里如果你想把你的可执行文件放入另外的文件中的话,你的bin_PROGRAM = /xxx/xxx/test,这里要使用绝对路径,相对路径搂着试了没用,如果有人有另外的方法,请告知楼主,让我这个小白也知道一下。嘻嘻。如果使用绝对路径这里的SOURCES前面就不是test而是_xxx_xxx_test_SOURCES = 这样才有效。

项目下的Makefile.am文件更简单


Makefile.am的全局变量:



在Makefile.am中尽量使用相对路径,系统预定义了两个基本路径:


最后我想说的是,大家在使用这个东西的时候不要在include中定义config.h文件,因为楼主定义了这个文件之后不能正常使用make命令,我觉得是和系统的config.h文件重了现在我还没有搞明白是为啥,如果知道的请告知一下我。

引用:

https://www.ibm.com/developerworks/cn/linux/l-makefile/

 

Linux下Makefile的automake生成全攻略

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M...
  • zhangwentaohh
  • zhangwentaohh
  • 2013年11月24日 16:08
  • 1220

automake自动生成makefile文件

Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多。好在Linux为我们提供了自动生成功能完善的Makefile文件的工具...
  • qq_33336155
  • qq_33336155
  • 2016年09月16日 18:42
  • 568

运用autoconf和automake自动生成Makefile实例讲解

标题:运用autoconf和automake自动生成Makefile实例讲解 2008-06-30 17:57:28 对于一个UNIX/Linux下C程序员来说,一个比较麻烦的工作...
  • yangguangmeng
  • yangguangmeng
  • 2014年05月22日 23:11
  • 1620

教你如何使用automake生成Makefile文件

引言 总所周知,Makefile主要用来组织源码的编译,其语法在此不再迭述。经分析可发现,源码的组织结构通常有以下3种形式: ①、flat:所有文件都处在同一目录 所有源文件、头文件...
  • wh8_2011
  • wh8_2011
  • 2017年07月02日 11:19
  • 260

使用autoconf生成Makefile并编译工程

这里我会用一个例子来说明怎么用autoconf工具生成规范的Makefile并且编译工程
  • u013793399
  • u013793399
  • 2016年08月09日 15:31
  • 422

使用autoconfig/automake生成makefile文件以及将程序打包为tar.gz

首先简略的说一下用automake生成Makefile的步骤: (1)创建源代码文件,使用"autoscan"生成configure.scan文件,将其重命名为configure.ac,并做适当修改...
  • susidian
  • susidian
  • 2016年09月24日 22:55
  • 660

使用automake自动生成makefile(上)

利用Linux下自动生成makefile的工具: automake, autoconf 生成makefile的一般过程 1.  创建工程目录和各个目录下的makefile.am。工程的名字一般...
  • yusiguyuan
  • yusiguyuan
  • 2013年08月29日 18:31
  • 730

关于makefile中自动产生依赖的理解

本博文是在学习了《GNU Make中文手册》后记录下来的自己的关于自动产生makefile依赖的语句的理解,向大家分享。 《GNU make中文手册》中的相关章节见一下链接: ==========...
  • GMPY_Tiger
  • GMPY_Tiger
  • 2016年07月07日 13:33
  • 2038

Makefile 自动生成依赖

虽然以前对Makefile有个基本概念,但是真正到自己去写一个哪怕是简单的Makefile时也会遇到不少的麻烦。     现在我有如下文件 dList.h dList.c memory.c debug...
  • mengshi12
  • mengshi12
  • 2016年08月21日 22:52
  • 469

linux下自动生成Makefile文件

makefile autoconf automake
  • CodySnow
  • CodySnow
  • 2016年01月26日 11:25
  • 1849
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:automake自动生成Makefile及遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)