所必须的软件:autoconf

(generate configuration script [configuration])

automake( aclocal:automatically generate

aclocal.m4 from configure.in)

m4 perl libtool(其中libtool非必须)。

autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到

m4,便于生成脚本。automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,

automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。libtool是一款方便生成各种

程序库的工具。

生成Makefile的操作过程如下:

1) 运行autoscan命令

2) 将configure.scan 文件重命名为configure.in,并修改configure.in文件

$sudo mv configure.scan configure.in

3)

在project目录下新建Makefile.am文件,并在core和shell目录下也新建makefile.am文件

4) 在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件

5) 将/usr/share/automake-1.10/目录下的depcomp和complie文件拷贝到本目录下

6) 运行aclocal命令(configure.in-->aclocal.m4)

7) 运行autoconf命令 (configure.in+aclocal.m4 -->

configuration)

8) 运行automake -a命令

(Makefile.am+configuration.in-->Makefile.in)

9) 运行./confiugre脚本

从上图中可以看出,对于用户而言,其中最主要的就是编写configuratio.in

和Makefile.am文件,首先我们来看configuration.in文件,每个configure.scan文件都是以AC_INIT开头,以AC_OUTPUT结束。我们不难从文件中看出confiugre.in文件的一般布局为:测试程序(check

for programs),测试库(libraries),测试头文件(header

file),测试类型定义(typedef),测试结构(constructure),测试编译器特性(compiler

characters),测试库函数(libraries functions);修改后的结果如下:

# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)

#AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)

AC_INIT(test, 1.0, haizi007418@sina.com)

AC_CONFIG_SRCDIR([src/ModuleA/apple/core/test.c])

AM_CONFIG_HEADER(config.h)

# AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)

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 #Multithread

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

# 在AC_OUTPUT输入 要创建的Makefile文件名

AC_OUTPUT([Makefile

src/lib/Makefile

src/ModuleA/apple/core/Makefile

src/ModuleA/apple/shell/Makefile

])

其中要将AC_CONFIG_HEADER([config.h])修改为:AM_CONFIG_HEADER(config.h),

并加入AM_INIT_AUTOMAKE(test,1.0);

最后,我们来看看Makefile.am文件,它是一种比Makefile更高层次的规则。只需指定要生成什么目标,它由什么源文件生成,要安装到什么目录等构成。表一列出了可执行文件、静态库、头文件和数据文件,四种书写Makefile.am文件个一般格式。

表 1Makefile.am一般格式

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

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

在上文中我们提到过安装路径,automake设置了默认的安装路径:

1) 标准安装路径

默认安装路径为:$(prefix) = /usr/local,可以通过./configure

--prefix=的方法来覆盖。

其它的预定义目录还包括:bindir = $(prefix)/bin, libdir = $(prefix)/lib,

datadir = $(prefix)/share, sysconfdir = $(prefix)/etc等等。

2) 定义一个新的安装路径

比如test, 可定义testdir = $(prefix)/test, 然后test_DATA =test1

test2,则test1,test2会作为数据文件安装到$(prefix)/ /test目录下。

我们首先需要在工程顶层目录下创建一个Makefile.am来指明包含的子目录,由于每个源文件都会用到相同的头文件,所以我们在最顶层的Makefile.am中包含了

编译源文件时所用到的头文件,并导出。

SUBDIRS=src/lib src/ModuleA/apple/shell src/ModuleA/apple/core

CURRENTPATH=$(shell /bin/pwd)

INCLUDES=-I$(CURRENTPATH)/src/include -I$(CURRENTPATH)/src/ModuleA/apple/include

export INCLUDES

我们将lib目录下的swap.c文件编译成libswap.a文件(只想编译,而并不想安装),被apple/shell/apple.c文件调用,那么lib目录下的Makefile.am如下所示:

noinst_LIBRARIES=libswap.a

libswap_a_SOURCES=swap.c

INCLUDES=-I$(top_srcdir)/src/includ

如果想安装,那么库将会安装到$(prefix)/lib目录下,可执行文件将会安装到${prefix}/bin,则Makefile.am如下:

bin_LIBRARIES=libswap.a

libswap_a_SOURCES=swap.c

INCLUDES=-I$(top_srcdir)/src/include

# 将swap.h安装到${prefix}/include /swap目录下

swapincludedir=$(includedir)/swap

swapinclude_HEADERS=$(top_srcdir)/src/include/swap.h

接下来,对于可执行文件类型的情况,我们将讨论如何写Makefile.am?对于编译apple/core目录下的文件,我们写成的Makefile.am如下所示:

noinst_PROGRAMS=test

test_SOURCES=test.c

# test.c文件在链接时,需要apple.o和

libswap.a文件

test_LDADD=$(top_srcdir)/src/ModuleA/apple/shell/apple.o $(top_srcdir)/src/lib/libswap.a

# Linux下的信号量/读写锁文件进行编译,需要在编译选项中指明-

D_GNU_SOURCE

test_LDFLAGS=-D_GNU_SOURCE

# test_LDFLAGS只是链接时的选项,编译时同样需要指明该选项,所以需要

DEFS来指明编译选项

# DEFS已经有初始值,所以这里用+=的形式指明。

DEFS+=-D_GNU_SOURCE

# 如果你的程序还包含其他的库,除了用AC_CHECK_LIB宏来指明外,还可以用LIBS来指明

#LIBS=-lpthread

终结

对于一个已有configure.in and Makefile.am

的源程序包,我们只需要通过执行下述命令来生成Makefile文件: aclocal ,

autoconf,automake,./configure 就可以生成Makefile文件,然后sudo make

就开始编译源程序(编译时error),最后sudo make install

安装。运行。。。。。。(可能有运行时error)!

linux makefile文件怎么生成,Makefile文件生成相关推荐

  1. linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤

    前言 在Linux下,编译和链接需要用Makefile,而写好一个Makefile可不容易,写出一个规范的Makefile更是麻烦.我们可以利用autoconf来生成一个Makefile,尤其在大型工 ...

  2. linux清除configure文件_在Linux操作系统下自动生成Makefile的方法

    在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情.但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事.而且由于Makefile的各种显式,隐式规则,加之平时并 ...

  3. linux系统中自动生成snap文件_在Linux操作系统下自动生成Makefile的方法

    在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情.但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事.而且由于Makefile的各种显式,隐式规则,加之平时并 ...

  4. 例解 autoconf 和 automake 生成 Makefile 文件

    http://www.ibm.com/developerworks/cn/linux/l-makefile/ 生成 Makefile 的来龙去脉 首先进入 project 目录,在该目录下运行一系列命 ...

  5. Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译

    转自1:https://www.cnblogs.com/cv-pr/p/6206921.html 转自2:https://blog.csdn.net/qqwangfan/article/details ...

  6. 例解 autoconf 和 automake 生成 Makefile 文件[转+个人修改]

    引子 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install.利用make工具,我们可 ...

  7. CodeBlocks自动生成makefile文件使用工具cbp2make

    一.安装 Ubuntu 安装 :sudo apt-get install cbp2make 也可以源码安装. 二.生成makefile 这里要用到CodeBlocks的工程文件 .cbp cbp2ma ...

  8. Linux 用qmake快速生成makefile

    1.简介: qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具.是qt工具包的一部分.在Unix&linux上写程式的人大概都碰过Makefile.用 ...

  9. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

最新文章

  1. 微信小程序 封装网络请求并调用
  2. 暂无,进程那篇深度不够
  3. Windows服务器上怎样开放指定端口
  4. Linux驱动编程 step-by-step (十) Linux 内核链表
  5. Ubuntu输入密码登陆后又跳回到登录界面
  6. 关于open***的实验总结
  7. cad2010多个文件并排显示_并排查看Excel工作表只需1个小动作,工作效率大涨百倍!...
  8. tensorflow之train.get_checkpoint_state
  9. jQuery,Table表头固定插件chromatable存在的问题及解决办法
  10. linux 修改ssh密码_西部数码使用指南:弹性云linux系统通过控制台进入单用户重置ssh登陆密码(适用centos6)...
  11. Python数据分析通关,30个案例!
  12. Unity 移动方法总结
  13. 如何使用ps制作ico图标文件
  14. ps修图教程新手入门:如何用Photoshop处理证件照
  15. Clarke Wight saving algorithm求解tsp问题
  16. OpenWrt的SR9000有线网卡驱动
  17. el-table表格横竖双表头,表头带斜线
  18. qq公众平台出错了609_中仑供应链业务线:一站式快消品订货平台
  19. git am, git apply, git format-patch,git diff 用法
  20. Android Activity的启动流程分析:以Launcher启动一个Activity为例,分析应用进程的创建、Activity的启动,以及他们和AMS之间的交互

热门文章

  1. 小程序海报的制作与保存
  2. wpf menu 菜单 快捷键
  3. 拒绝广告套路,音频营销这三招“玩的就是个性”
  4. 「项目管理」如何做好项目进度管理计划?
  5. ASP.NET Web API 控制器创建过程
  6. spring boot ELK搭建
  7. mysql客户端navicate注释sql语句
  8. Windows11 使用天正T20 V7乱码问题
  9. matplotlib.pyplot contourf()函数的使用
  10. 开源组件漏洞检查工具实践分析