最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含。以前写过编译这样组织的源码的makefile,所以这次也就直接写了。

确实因为各个文件间的头文件互相包含,造成在第一次写完后,make时出现了很多未定义。于是把各个文件的头文件重新检查一边,同时载makefile中尽量按照相对路径,把所有的头文件都包含进来。终于在忙活了三个小时后,一个可以在自己机器上编译的makefile写好了。(仅指在自己的机器上,因为有一个库文件使用的是我电脑上的绝对路径)

果然,在拿到同事的机器上编译时,因为我们的库文件安装的路径不一样,编译时找不到库文件出问题了。于是不得不在他的电脑上重新该库的路径,由于在每个文件夹下都有makefile,而且大部分都和这个库有关系,所以又改了不少时间。于是每次我们交换文件时,都要改变一次库文件的路径。就感觉麻烦。正好这个时候,看到了automake和autoconf,可以使用他们来自动生成makefile,只要在配置configure时,修改参数就可以。于是决定试试它。

开始时很顺利,一次编译就成功了。(从http://www.gnu.org/software/autoconf/下载automake和autoconf)

但是后来交叉编译时,出问题了。还是库的原因,因为自己载PC 上装的是默认路径,没有问题,但是交叉编译的库的路径不在默认路径下,结果怎么也编译通不过。后来找到原因了,因为自己以前编译sqlite3库的时候,可能将交叉编译链的名称写错了,结果编译出的库不是arm-linux-gcc4.2的,还是pc的GCC。

之所以想到这里是因为之前在编译时最后几行会有这样的提示 /usr/bin/ld: skipping incompatible /home/tt/Public/sql-arm-lib/lib/libsqlite3.a when searching for -lsqlite3才想到可能是自己的库出问题了,以前也遇到过,但是已是很早已前的事情了。没想到同样的问题,现在又出现了。

找到问题后,今天晚上重新编译了以下sqlite3库,使用arm-none-linux-guneabi-gcc

然后在重新编译,make通过了。

在这里重复一点就是如果是要在configure时,从外部输入路径(即载写Makefile.am时,用到@@修饰中间的参数时),在修改configure.in需要对相应的参数加上AC_SUBST()宏,如果不加则路径添加不进去。自己在编译时是这样的,不知道有没有更好地办法。

这里想到其实在configure时可以使用脚本来控制,这样就更方便了。好像makefile.am也可以那脚本来生成,不过自己还没有去查。

自动生成Makefile时,关于Makefile.am编写的更多相关文章

  1. mybatis-generator自动生成代码时,只生成insert方法

    今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...

  2. wix在使用heat自动生成wxs时添加windows服务组件

    最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了 <Componet Id="myservice"&g ...

  3. mybatis generator自动生成代码时 只生成了insert 而没有其他的

    mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...

  4. MVC Code First 自动生成数据库时生成的表名会多了一个s

    如图:我的类文件都是不带s的

  5. git如何在自动生成补丁时指定补丁名的起始编号

    答:使用选项--start-number,用法如下: git format-patch 1f43be --start-number=2 这样就可以生成起始编号为2的补丁名,类似0002-me.patc ...

  6. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  7. 【MyBatis】MyBatis自动生成代码查询之爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

  8. mybatis-generator : 自动生成代码

    [参考文章]:mybatis generator自动生成代码时 只生成了insert 而没有其他 [参考文章]:Mybatis Generator最完整配置详解 1. pom <plugin&g ...

  9. 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

    静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...

  10. EntityFrameworkCore Db First 生成Model时出错 PowerShell 版本过低

    一般Windows7默认安装的是PowerShell 2.0 使用Vs2017开发.Net Core时.使用 EntityFrameworkCore Db First自动生成实体时需要用到下面命令: ...

随机推荐

  1. selenium+python自动化之CSS定位

    一.css:属性定位 1.css可以通过元素的id.class.标签这三个常规属性直接定位到 2.如下是百度输入框的的html代码: <input id="kw" class ...

  2. C# ASP.NET基类,常用类库及源代码

    http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

  3. [jquery] jQuery jsTree V3.2.1 基础Demo

    引入对应的文件: <link rel="stylesheet" href="../dist/themes/default/style.min.css" / ...

  4. startActivityForResult用法详解

    一.如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode ...

  5. mysql frm的恢复,data里只有frm文件的恢复

    mysql frm的恢复,data里只有frm文件的恢复 mysql frm的恢复,data里只有frm文件的恢复,换了系统,装了windows2003,重装最新5.4版的mysql,把原来的一个数据 ...

  6. TextArea限制输入长度

    cs文件中添加文本框属性this.TextBox.Attributes.Add("MaxLength", "200"); $(document).ready(f ...

  7. Spring实战1:Spring初探

    主要内容 Spring的使命--简化Java开发 Spring容器 Spring的整体架构 Spring的新发展 现在的Java程序员赶上了好时候.在将近20年的历史中,Java的发展历经沉浮.尽管有 ...

  8. bzoj3136

    Description 给定m个素数和Q个询问.每个询问有n个人,每次操作可以任意选择其中的一个素数p(素数可以重复使用),然后去掉剩余人数 mod p个人.对于每个询问,我们想知道,至少需要多少步操 ...

  9. Dictionary 的使用

    1. 定义字典变量,并初始化 // 元素值字典 Dictionary<string, string> dic = new Dictionary<string, string>( ...

  10. 案例:用Redis来存储关注关系(php版)

    Redis提供了丰富的数据类型,比起关系型数据库或者简单的Key-Value存储(比如Memcached)来,Redis的数据模型与实际应用的数据模型更相近.比如下面说到的好友关系的存储,原作者使用了 ...