转载说明: html
虽然没有开发过C语言的大型项目,但一直对C语言的项目组织比较感兴趣。固然不是Visual Sutdio,CodeBlock 这类IDE的项目组织,而是GNU 系列开源工具。 若是在用过Linux系统就知道安装开源软件的这三个命令: linux
./configure (./config) git
make 网络
make install(./make uninstall) 工具
这类软件大多数开源软件都是采用GNU 构建体系,具体表如今autotools 系列工具。转载的这篇博文就是autools 系列软件的使用流程。
网站
注1:安装软件时建议采用apt-get install gcc make autoconf automake libtool libsysfs-dev 命令安装。适用于 debian 或基于 debian的系统。采用原文的 源码安装,会出现下面的错误 ui
configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL this
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1 spa
注2:能够结合@中山野鬼 关于make 文档编写的博文阅读 .net
注3:这里有一副图说明了 autotools 系列各个工具的使用关系,来源于网络,具体出处已经记不起了
转载正文:
GNU autotools安装
一、下载软件包,在linux嵌入式开发过程当中有不少的工具其实都在GNU的官方网站能够下载到 http://www.gnu.org/software/software.html
二、要安装autotools须要以下几个文件
automake
autoconf
M4
安装顺序是M4 -> autoconf -> automake (很重要!!!!)
安装须要的命令:
tar zxvf **
./configure
make
make install
我下载的版本是;
autoconf-2.63.tar.gz
automake-1.9.1.tar.gz
m4-1.4.11.tar.gz
GNU autotools的使用
Linux下,工程管理器 Make 可用于自动编译、连接程序的实用工具。咱们要作的是写一个makefile 文件,而后用make命令来编译、连接程序。
Makefile的做用就是让编译器知道要编译一个文件须要依赖其余的哪些文件。这里咱们就是要用GNU Autotools来收集系统配置信息并自动生成Makefile文件。
GNU Autotools指的就是下面的五个工具:
(1)aclocal
(2)autoscan
(3)autoconf
(4)autoheader
(5)automake
Autotools的使用流程
第一步:手工编写Makefile.am这个文件
第二步:在源代码目录树的最高层运行autoscan。而后手动修改configure.scan文件,并更名为configure.ac/configure.in。
第三步:运行aclocal,它会根据configure.ac的内容生成aclocal.m4文件。
第四步:运行autoconf,它根据configure.ac和aclocal.m4的内容生成configure这个配置脚本文件。
第五步:运行automake --add-missing,它根据Makefile.am的内容生成Makefile.in。
第六步:运行configure,它会根据Makefile.in的内容生成Makefile这个文件。
得到Makefile文件后,咱们就可使用make程序来管理咱们的工程了
下面咱们来举个例子:
有一个简单的工程,其目录和文件结构以下所述:工程的最高层目录test中有一个hello.c文件和lib、include两个子目录。在lib目录中有一个print.c文件,在include目录中有一个print.h文件。
(1)为该工程编写automake的输入配置脚本Makefile.am。
(2)使用Gnu Autotools工具为该工程建立Makefile文件,并编译该工程。
这里咱们总共有三个目录,但只要在 test目录 和 test/lib目录下分别建立Makefile.am文件,test/include不须要建立Makefile.am文件。文件内容以下:
(1)hello.c
include "include/print.h"
int main(void)
{
print("Hello, Aillo\n");
return 0;
}
(2)print.h
void print ( char *s );
(3)print.c
#include "../include/print.h"
#include<stdio.h>
void print(char *string)
{
printf("%s",string);
}
(4)test目录下的Makefile.am的内容:
SUBDIRS = lib
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.chello_LDADD = ./lib/libprint.a
(5)lib目录下的Makefile.am的内容:
noinst_LIBRARIES = libprint.a
libprint_a_SOURCES = print.c ../include/print.h
开始使用aututools:步骤以下:
(1)输入并执行"autoscan"命令,生成configure.scan文件,修改configure.scan文件的内容以下(图中选中的位置为须要添加或修改的地方),改完以后将文件重命名为configure.ac
(若是图片看不见,须要修改和添加的地方是:
AC_INIT(hello,0.01)
AM_INIT_AUTOMAKE
AC_PROG_RANLIB
)
(2)输入并执行"aclocal"命令
(3)输入并执行"autoconf"命令
(4)输入并执行"autoheader"命令
(5)输入并执行"automake --add-missing"命令,该步骤若是出现
"Makefile.am:require file ./NEWS" not found"
"Makefile.am:require file "./README not found"
则运行 touch NEWS README * * ( * * 表明你所缺失的文件,个数、名称因我的状况而定)
(6)输入并执行"./configure"命令,便可生成Makefile文件
(7)输入并执行"make -f Makefile "命令,编译文件,生成 hello 文件
(8)" ./hello "执行hello文件,运行结果以下:
(若是图片看不见,结果是:Hello, Aillo)