自动生存Makefile教程 autoscan aclocal autoconf autoheader automake configure
LZ没学过makefile的写法,只知道使用tab。于是乎发现了autotools系列工具
基本流程是:autoscan、aclocal、autoconf、autoheader、automake、configure
(1) 使用autoscan命令自动生成configure.scan文件(configure.in原型)
muye@bupt:~/FFTC/FFTC$ cd test/
muye@bupt:~/FFTC/FFTC/test$ ls
Complex_Array.cpp Complex.cpp config.h FFT.h
Complex_Array.h Complex.h FFT.cpp main.cpp
muye@bupt:~/FFTC/FFTC/test$ autoscan
muye@bupt:~/FFTC/FFTC/test$ ls
autoscan.log Complex_Array.h Complex.h configure.scan FFT.h
Complex_Array.cpp Complex.cpp config.h FFT.cpp main.cpp
muye@bupt:~/FFTC/FFTC/test$
(2)将configure.scan重命名为configure.in, 并做适当修改
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.68])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT(FFT, 1.0)
AC_INIT_AUTOMAKE(FFT, 1.0)
AC_CONFIG_SRCDIR([main.cpp])
AC_CONFIG_HEADERS([config.h]) # Checks for programs.
AC_PROG_CXX
AC_PROG_CC # Checks for libraries. # Checks for header files.
AC_CHECK_HEADERS([stdlib.h]) # Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T # Checks for library functions.
AC_FUNC_MALLOC
AC_CHECK_FUNCS([clock_gettime pow])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
说明:
- 以"#"号开始的行为注释
- AC_PREREQ宏声明本文要求的autoconf版本, 如本例中的版本 2.65
- AC_INIT宏用来定义软件的名称和版本等信息, 在本例中省略了BUG-REPROT-ADDRESS, 一般为作者的E-mail
- AM_INIT_AUTOMAKE是手动添加的, 它是automake所必备的宏, 也同前面一样, PACKAGE是所要产生软件套件的名称,VERSION是版本编号.
- AC_CONFIG_SCRDIR宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性. 在此处指当前目录下hello.c
- AC_CONFIG_FILES宏用于生成相应的Makefile文件.
(3) 运行aclocal命令,生成"aclocal.m4"文件
(4) 运行autoconf命令生成configure可执行文件
(5) 运行autoheader命令, 生成config.h.in文件
(6) 新建Makefile.am,内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=fft
hello_SOURCES=fft.cpp Complex_Array.h FFT.h Complex.cpp main.cpp Complex_Array.cpp Complex.h FFT.cpp
说明:
- 其中的AUTOMAKE_OPTIONS为设置automake的选项. 由于GNU对自己发布的软件有严格的规范, 比如必须附带许可证声明文件COPYING等, 否则automake执行时会报错. automake提供了3中软件等级:foreign, gnu和gnits, 供用户选择. 默认级别是gnu. 在本例中, 使用了foreign等级, 它只检测必须的文件.
- bin_PROGRAMS定义要产生的执行文件名. 如果要产生多个执行文件, 每个文件名用空格隔开
- hello_SOURCES 定义"hello"这个可执行程序所需的原始文件. 如果"hello"这个程序是由多个源文件所产生的, 则必须把它所用到的所有源文件都列出来, 并用空格隔开. 如果要定义多个可执行程序, 那么需要对每个可执行程序建立对应的file_SOURCES.
(7) 运行automake命令, 生成Makefile.in文件
automake --add-missing
(8)运行configure, 生成Makfefile文件
自动生存Makefile教程 autoscan aclocal autoconf autoheader automake configure的更多相关文章
- autoscan; aclocal; autoconf; automake --add-missing; ./configure; make
1.autoscan 在源码目录下执行autoscan,生成configure.scan,重命名为configure.in或者configure.ac,然后编辑文件内容: ============== ...
- 自动生成 Makefile (automake/autoconf 入门)
作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ,如果要想写出一个符合自由软件 ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- 手把手教你自动生成Makefile
概述:autoconf/automake工具用于自动创建功能完善的Makefile文件,接下来简单介绍一下,如何使用上述工具 自动生成Makefile 前提:安装autoconf工具(ubuntu:s ...
- Linux autoconf和automake使用
作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Mak ...
- 使用autoconf与automake自动生成MakeFile文件
automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...
- 图解aclocal、autoconf、automake、autoheader、configure
http://www.laruence.com/2008/11/11/606.html 本文地址: http://www.laruence.com/2008/11/11/606.html 转载文章 原 ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- 运用Autoconf和Automake生成Makefile的学习之路
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
随机推荐
- 运用集合来做一个DVD管理器(全代码)
package DVD;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Array ...
- 高效使用Bitmaps(一) 大Bitmap的加载
转载:http://my.oschina.net/rengwuxian/blog/182885 高效使用Bitmaps有什么好处? 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化 ...
- Intent简介
1 Intent概念 1.1 Intent的作用 指明Intent所要启动的对象 提供将要启动对象组件运行需要的数据 组件类型 启动方法 Activity startActivity(Intent i ...
- Unity3D之AssetBundle学习:Android上运行笔记
路径统一 在Android上加载StreamingAssets文件夹下的AssetBundle文件,首先需要对加载地址进行处理,注意PC.Android和IOS的地址不一致需要针对不同的平台不同的处理 ...
- PowerDesigner 业务处理模型( BPM )
PowerDesigner 业务处理模型( BPM ) 说明 properties语言文档xmlvalidation数据库 目录(?)[+] 一. BPM 简介 业务处理模型(Busi ...
- 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)
题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 输入: 每个测试案例包括n+1行: 第一行为2 ...
- 有关字符串作为URL的 UTF8编码和解码的问题。
当字符串要作为url访问的时候,我们对字符串中的中文非常头疼,这时候需就需要使用 UTF8来编码: //使用 stringByAddingPercentEscapesUsingEncoding 方法来 ...
- Windows Server 2012配置开机启动项
1.运行 shell:startup 命令,如下:
- hdu 4104
先排序,再动态规划.须要优化 #include<iostream> #include<cstdio> #include<cstring> #include<s ...
- 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”
//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void ...