自动生成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也可以那脚本来生成,不过自己还没有去查。

时间: 2024-11-10 08:24:49

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

mybatis使用generator自动生成代码时的类型转换

使用mybatis的generator自动生成代码,但是oracle数据库中number(6,2)总是自动转成BigDecimal,我想要转成的是float类型 这样就写了一个类型转换器,需要继承JavaTypeResolver接口 然后在mybaties配置文件generatorConfig.xml中类型转换配置位置添加上即可 <javaTypeResolver type="com.generator.MyJavaTypeResolver"> <property n

修改表结构后,自动生成(mybatis-generator)时遇到的坑

我们的项目是springboot搭起来的,按照接口API -> Service -> Common(Manager.Mapper.dao)这种Maven的依赖结构,所以自动生成的mybatis-generator.xml也就从common包里找.现在问题的场景是项目此前已经按照数据表自动生成了mapper内容,现在由于bug或者业务调整要改变表结构,就要注意以下几个坑: 1.要找到common文件夹下的generator.xml文件释放相应表的<table  >注释,再点击Plug

Myeclipse10.7自动生成hibernate时需要注意的问题

hibernate.cfg.xml中的javax.persistence.validation.mode默认情况下是auto的,就是说如果不设置的话它是会自动去你的classpath下面找一个bean-validation**包, 但是找不到,所以beanvalitionFactory错误,org.hibernate.HibernateException: Error applying BeanValidation relational constraints.需要配置文件下加上一句 <prop

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

如图:我的类文件都是不带s的 但是生成了的数据库表却是带了s的,如下图: 因为code first默认了就会加上s,解决方法: 在上下文文件中加入这段代码: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } 如图所示:

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

答:使用选项--start-number,用法如下: git format-patch 1f43be --start-number=2 这样就可以生成起始编号为2的补丁名,类似0002-me.patch,0003-your.patch 参考资料 git format-patch的使用方法 原文地址:https://www.cnblogs.com/dakewei/p/10299955.html

Mybatis_plus 自动生成代码时因为下划线造成的问题

1.oracle 在Mybatis_plus执行首先会进行一系列的配置,在配置的时候要注意: 1.StrategyConfig.setTablePrefix设置表名前缀 这一步可能会造成一些影响 2.DataSourceConfig.setDbType(DbType.ORACLE) 要注意这句话,要加上. 3.也是我折腾了半天时间的问题:strategy.setInclude()  设置表名 在Oracle的时候,如果你在写表名的时候,写成小写:那么你可能会发现文件夹生成了,但是没有java文件

Word中使用VBA自动生成公式时的注意事项

Sub GenEQ()     If Selection.start <> Selection.End Then         Dim objRange As Range         Dim objEq As OMath              Set objRange = Selection.Range         '不能加入下面这行注释掉的代码,否则在日文版Word 2007和2010上将不能实现下面的灵活字体控制         'objRange.Text = Select

Makefile 7——自动生成依赖关系 三颗星

后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上"objs/"前缀.gcc的-E选项,预处理.在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了.通过-E选项,可以避免生成依赖关系时gcc发出警告,以及提高依赖关系的生成效率. 现在,已经找到自动生成依赖关系的方法了,那么如何将其整合到我们complicated项目的Makefile中呢?自动生成

自动生成项目的Makefile文件

自动生成项目的Makefile文件 理论基础 跟我一起写 Makefile:   http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225 例解 autoconf 和 automake 生成 Makefile 文件:   http://www.ibm.com/developerworks/cn/linux/l-makefile/index.html 步骤 写好Makefile.am 运行 autoscan , 自动创建两个文件: a