自动生成Makefile时,关于Makefile.am编写
最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含。以前写过编译这样组织的源码的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编写的更多相关文章
- mybatis-generator自动生成代码时,只生成insert方法
今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...
- wix在使用heat自动生成wxs时添加windows服务组件
最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了 <Componet Id="myservice"&g ...
- mybatis generator自动生成代码时 只生成了insert 而没有其他的
mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...
- MVC Code First 自动生成数据库时生成的表名会多了一个s
如图:我的类文件都是不带s的
- git如何在自动生成补丁时指定补丁名的起始编号
答:使用选项--start-number,用法如下: git format-patch 1f43be --start-number=2 这样就可以生成起始编号为2的补丁名,类似0002-me.patc ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- 【MyBatis】MyBatis自动生成代码查询之爬坑记
前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...
- mybatis-generator : 自动生成代码
[参考文章]:mybatis generator自动生成代码时 只生成了insert 而没有其他 [参考文章]:Mybatis Generator最完整配置详解 1. pom <plugin&g ...
- 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字
静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...
- EntityFrameworkCore Db First 生成Model时出错 PowerShell 版本过低
一般Windows7默认安装的是PowerShell 2.0 使用Vs2017开发.Net Core时.使用 EntityFrameworkCore Db First自动生成实体时需要用到下面命令: ...
随机推荐
- DMALL刘江峰:生鲜市场具有巨大O2O改造空间
今日,全球移动互联网大会(GMIC)在北京-国家会议中心开幕.DMALL创始人刘江峰在全球O2O峰会论坛作主题发言时谈到,生鲜市场具有巨大O2O改造空间.同时这也是刘江峰在离开荣耀之后首次登台介绍自己 ...
- Jenkins: 基础篇(环境配置)
自动化领域比较有影响力的开源框架jenkins,确实比较强大,易用.很多公司将其用来做持续即成CI(continuous integration).为了拓展和强化自己的软件设计生态系统,也将很久前使用 ...
- Android启动画面实现
每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO.公司LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥 ...
- 剑指offer系列37----数据流中的中位数
[题目]如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值, * 那么中位数就是所有数值排序之后位于中间的数值. package com.exe8.offer; import java.uti ...
- can't run as root without the -u switch
[root@localhost ~]# /usr/local/memcache/bin/memcached can't run as root without the -u switch [root@ ...
- sqlite3移植到arm linux
1,环境: 软件:linux:2.6.38 硬件:6410 交叉编译工具:arm-linux-gcc 也适用于其他linux平台. 2,步骤: 1>下载sqlite3源码包: http://ww ...
- 黄聪:Mysql5.6缓存命中率
MySQL缓存命中率,网上说法不一,下面我说下我的看法,大家轻拍: 总的select查询数等于com_select(没命中) + qcache_hits(命中) + 解析错误的查询. 再来看看Com_ ...
- Swing多线程
Swing的单线程开发机制 多线程开发,显然要比单线程开发有趣.高效.美妙得多.特别是在Java这种天生支持多线程的语言中,更是如此.可是,Java最重要的组成部分Swing确是单线程的! 并非只有S ...
- 2016 Multi-University Training Contest 5 Divide the Sequence
Divide the Sequence 题意: 给你一个序列A,问你最多能够分成多少个连续子序列,使得每个子序列的所有前缀和均不小于0 题解: 这题是比赛时候的水题,但我比的时候也就做出这一题, = ...
- NeHe OpenGL教程 第二课:多边形
前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...