VS项目迁移到linux环境中Makefile相关小问题集锦

来源:互联网 发布:淘宝店铺标志尺寸 编辑:程序博客网 时间:2024/06/05 08:04

背景

有些库只能在linux环境中运行,导致的结果,就是整个项目需要迁移到linux的环境,所以需要Makefile.

过程

关于Makefile的修改分为了三个阶段,由Makefile.am和Makefile.in 自动生成Makefile;修改代码后,将原来.c修改成.cpp后,如何修改Makefile.in;添加库之后,如何修改Makefile。在这三个阶段中,遇到了一些问题。

阶段一:自动生成Makefile。

参考:
1. Makefile.am和makefile.in生成Makefile
2. autotools的简单用法
大致包括如下命令:

autoscan
aclocal
autoconf
autoheader
automake

然后就自动生成了configure文件,之后./configure,自动生成Makefile。
注意:在autotools的使用过程中,除了源代码以外,必须的文件只有两个 configure.ac 和 Makefile.am。

阶段二:.c 修改成.cpp 如何修改Makefile.in

直接思路就是把所有的.c 替换成 .cpp即可。问题就来了,依旧是make失败,报错提示是xxx.c 无法找到。已经修改了makefile 中所有的xxx.c,还是这个报错,很绝望。
继续查看Makefile文件,以及存在的各种配置文件,后来终于发现是一个隐藏的 .deps中有xxx.c,应该是Makefile生成的一个中间文件,修改了.deps之后,Make成功了,谢天谢地。
总结: 自动生成的Makefile中,可能存在中间结果,显示所有的隐藏文件,对照着Makefile查看,最简单方式是删除这些中间文件,重新由Makefile生成,当然前提是确定这些隐藏的文件是中间文件,可以自动生成。

阶段三:添加库

Makefile 中需要注意的两个参数:LIBSLDFLAGS,还有includedir。
LDFLAGS:lib路径
LIBS: 要link的东西

报错:../../src/libFLAC/.libs/libFLAC.so: undefined reference to `makeIrredPoly(long, long)’

出现这个问题的原因,是lib的link过程出错了,有两个可能的原因:一、lib路径出错,二、lib路径中对应的.a不存在。排除这两个问题之后,就没问题了。

补充

  1. 关于Makefile生成,VS项目迁移到linux下,可以直接根据VS相关生成文件中编译路径之类的数据,自己写一个简易的Makefile,这是另一思路,应该会更加高效和机智;
  2. 自动生成的Makefile超级长,看起来超级累,如果有问题,或者进行一些修改,工作量很大,当还是懵懂的阶段,难度有点大。根据报错提示查找背后的原因,然后慢慢就会接近make done了。
  3. debug Makefile的时候,可以通过make -n来查看当前目录下make命令,自动生成的Makefile中,基本都是变量值,超级难看懂。
阅读全文
0 0