自动生成Makefile时,关于Makefile.am编写
2011-12-08 16:07
232 查看
最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含。以前写过编译这样组织的源码的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也可以那脚本来生成,不过自己还没有去查。
确实因为各个文件间的头文件互相包含,造成在第一次写完后,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编写
- automake连载---关于两个文件configure.in和Makefile.am的编写
- automake连载---关于两个文件configure.in和Makefile.am的编写
- 如何用autoscan和automake由makefile.am自动生成makefile
- 关于Linux的makefile的自动生成,以及.configure及编译选项
- automake连载---关于两个文件configure.in和Makefile.am的编写
- so的Makefile.am的编写 Makefile的生成
- 关于automake等工具自动生成Makefile文件的一些技术摘要
- automake--关于两个文件configure.in和Makefile.am的编写
- 编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。
- automake自动生成Makefile及遇到的问题
- 根据Makefile.am生成Makefile
- 关于自动生成主键和日期
- 编写嵌入式linux驱动时,如何才能自动加载设备并生成节点
- 关于Hibernate自动生成表的实体类时,出现两个java文件的解决办法
- Linux下Makefile自动生成
- ubuntu12.04使用autotools自动生成makefile
- [瞎折腾]使用freemarker编写MyBatis的Mapper.xml自动生成工具
- JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML***
- Makefile自动生成依赖性