autoconf和automake可以方便的构建linux下项目,一个简单的automake项目实例,麻雀虽小五脏俱全,以后无外乎在这基础上扩展相应的宏完善而已。

.首先建立项目目录树
)创建目录树
$ mkdir lib
$ mkdir src
$ mkdir include
$ vim include/arith.h
$ vim lib/addtest.cpp
$ vim lib/multest.cpp
$ vim src/arith.cpp
)编辑源代码文件
include/arith.h:
void addtest(int a, int b);
void multest(int a, int b);
lib/addtest.cpp:
#include <stdio.h>
void addtest(int a, int b)
{ printf(“add(%d, %d)=%d\n”,a, b, a+b); }
lib/multest.cpp:
#include <stdio.h>
void multest(int a, int b)
{ printf(“mul(%d, %d)=%d\n”,a, b, a*b); }
src/arith.cpp:
#include <arith.h>
int main()
{
addtest (, );
multest(, );
return ;
}
. autoconf
)生成默认的configure.ac
$ autoscan 此时目录下生成configure.scan
$ mv configure.scan configure.ac
)编辑configure.ac
AC_PREREQ(2.69)
AC_INIT(arith, 1.0) #软件版本号
AC_CONFIG_SRCDIR(src/arith.cpp) #检查源码文件存在
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR(m4) #添加该选项,否则会出现automake是缺少m4目录的警告 # Checks for programs.
AC_PROG_CXX #自动检测C++编译器
AC_PROG_CC #自动检测C++编译器
AC_PROG_LIBTOOL #检测libtool工具 AC_OUTPUT(Makefile lib/Makefile src/Makefile)
) 生成configure
$ aclocal 它是一个perl脚本,根据configure.in产生aclocal.m4
$ libtoolize –force 它会生成libtool所需要的工具,主要为生成库做准备
$ autoconf 通过aclocal.m4产生configure
. automake
) Makefile.am项层写法,编辑./Makefile.am如下
AUTOMAKE_OPTIONS=foreign
SUBDIRS = lib src #注意此处有编译先后顺序
) Makefile.am编译库文件的写法,编辑lib/Makefile.am如下
DEFAULT_INCLUDES=-I../include
lib_LTLIBRARIES = libarith.la
libarith_la_SOURCES = addtest.cpp multest.cpp
) Makefile.am编译开执行程序的写法,编辑src/Makefile.am如下
DEFAULT_INCLUDES=-I../include
bin_PROGRAMS = arith
arith _SOURCES = arithm.cpp
arith _LDADD= -L../lib/.libs/ -larith
) 生成Makefile.in
$ automake –add-missing 为了方便修改configure.in和Makefile.am重新automake可以编写脚本autogen.sh。以后直接运行该脚本就完成automake过程
#!/bin/sh
echo "1.aclocal"
aclocal
echo "2.libtoolize --force"
libtoolize --force
echo "3.autoconf"
autoconf
echo "4.automake --add-missing"
automake --add-missing . 编译运行(以arm为示例)
$ ./configure –host=arm-linux 此时机器上需要有arm-linux-gcc系统的编译工具
$ make
$ make install
make install后可能不能直接运行arith程序,原因是libtool默认的lib库文件安装目录是/usr/local/lib不在ld加载目录中,解决办法是在/etc/ld.so.conf文件中增加/usr/local/lib一行,运行ldconfig重新配置。 参考;
http://blog.csdn.net/fd315063004/article/details/7785504

Automake创建项目的更多相关文章

  1. MVC Core 网站开发(Ninesky) 1、创建项目

    又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三 ...

  2. MVC5 网站开发之二 创建项目

    昨天对项目的思路大致理了一下,今天先把解决方案建立起来.整个解决包含Ninesky.Web.Ninesky.Core,Ninesky.DataLibrary等3个项目.Ninesky.Web是web应 ...

  3. Maven自定义绑定插件目标:创建项目的源码jar

    <build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...

  4. Vs2012 创建项目失败 未找到与约束ContractName

    刚开始使用vs2012的时候,创建项目失败,后来找到原因 ,是KB2840642V2的原因,于是 卸载之.vs正常

  5. C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)

    一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...

  6. vs创建项目模板和项模板

    原文地址:https://msdn.microsoft.com/zhcn/library/xkh1wxd8(v=vs.140).aspx 如何:创建项目模板 Visual Studio 2015   ...

  7. cocos2d-x创建项目

    2.0之后的创建项目方法 第一步,首先 cd cocos2d-x-2.2.1/tools/project-creator/ 第二步, ./create_project.py -project Hell ...

  8. Django1.3 创建项目

    经历了各种失败各种烦恼以后Django开发环境终于搭建好了! 系统环境:ubuntu12.04    Django版本1.3.1   Python版本 2.7.3 接下来就兴建一个项目练习一下 1.创 ...

  9. thinkphp学习简易教程(一) thinkphp创建项目

    1.在本地服务器根目录下创建项目目录,如命名为app: 2.把thinkphp的压缩包解压到与项目同级目录下,如app是放在目录APP下面,即项目目录路径为'APP/app/',则thinkphp应解 ...

随机推荐

  1. 从51跳新唐cortex-m0学习1——思想转变

    Cortex-M0学习第一帖 序言:这里先说一下,大家在看帖子时候,可能看见字数比较多的,可能只是先大概浏览一下,之后从中挑几段大概瞅瞅,但是我要说,如果你碰到一个适合的帖子,请仔细品读,这是我在论坛 ...

  2. Spring-data-redis: 分布式队列

    Redis中list数据结构,具有"双端队列"的特性,同时redis具有持久数据的能力,因此redis实现分布式队列是非常安全可靠的.它类似于JMS中的"Queue&qu ...

  3. php 实现简单的登录

    //登录页面: V层前端模板: Administrator@QCEE61NZ66FEX2D /cygdrive/c/wamp/www/thinkphp/Home/Tpl/Login $ ls inde ...

  4. 最佳实践:Windows Azure 网站 (WAWS)

     编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Sunitha Muthukrishna 撰写. Windows Azure 网站 (WAWS) 允许您在 Windows ...

  5. java--折半查找

    /* 折半查找 */ class TwoSearch { //折半查找可以提高效率,但必须得保证是有序的数组 public static int halfSearch(int[] arr,int ke ...

  6. C#中文件管理的运用(Twelfth Day)

    又到了总结的时间了,今天在云和学院学习了文件管理的一些运用及复习昨天学的里氏转换.今天我就总结下昨天遗留下的问题以及今天所学的知识. 昨天遗留的问题 里氏转换(父类转子类) 例:在这里定义父类Peop ...

  7. ecplise启动tomcat异常

    由于myeclipse为正常关闭,导致下次启动时抛出异常:类似于无法加载异常缓存的内容之类... 处理办法: 1.关闭myeclipse 2.找到工作空间/.metadata/.plugins/ 3. ...

  8. PHP数组与对象之间用递归转换

    2 3 4 5 6 7 8  function object_to_array($e) {      $_arr = is_object($e) ? get_object_vars($e) : $e; ...

  9. web测试 结果存储类型为“Database”,但尚未指定结果储存库连接字符串

    vs2010 Ultimate版带有web测试功能,可以对网站的性能以及负载进行测试. 在进行负载测试时提示“异常 LoadTestConnectStringMissingException 1 Lo ...

  10. VC++对象布局的奥秘:虚函数、多继承、虚拟继承

    哈哈,从M$ Visual C++ Team的Andy Rich那里又偷学到一招:VC8的隐含编译项/d1reportSingleClassLayout和/d1reportAllClassLayout ...