我们知道在linux下编译源码一般步骤是根据本地的编译器和依赖库的路径编写Makefile然后make。但是一般的源码包解压后并没有Makefile。这也容易理解,毕竟源码作者并不知道使用者的编译环境,自然不可能写好现成的Makefile供其他人make。解决方案是利用shell脚本检测编译环境下的各种工具和依赖是否存在或版本是否支持,然后动态的生成Makefile。所以,这些源码包的编译主要是三个步骤:1、检测环境并生成Makefile;2、make;3、make install
检测环境&生成Makefile
源码包下的configure脚本完成动态生产Makefile的功能,在运行configure时需根据设定编辑器、编辑选项、依赖路径及其他配置项。具体支持的配置项可用./configure –help查看。为避免重复,可新建shell脚本执行./configure并传入参数。
例如编译pulseaudio时的执行命令如下:
./configure CC=arm-poky-linux-gnueabi-gcc \
CXX=arm-poky-linux-gnueabi-g++ \
PKG_CONFIG_PATH=/home/SealedGhost/pkgconfig \
--host=arm-poky-linux-gnueabi \
--prefix=/home/SealedGhost \
--with-system-user=root \
--with-system-group=root \
--with-access-group=root \
--disable-ipv6 \
- CC:目标平台C编译器
- CXX:目标平台C++编译器
- –host:目标平台
- –prefix:生成目录前缀
其他配置项详情见 ./configure –help
这里介绍下PKG_CONFIG_PATH,此项为指定pulseaudio依赖包的配置文件路径的环境变量。对于依赖的包,./configure会在PKG_CONFIG_PATH目录下遍历所有的*.pc文件。.pc文件为包配置文件,里面描述了对应包的名称、路径和版本等信息。./configure就是通过.pc文件的内容实现对依赖包的检查。
一般地,诸如PKG_CONFIG_PATH的环境变量也可以定义在/etc/profile中,这样执行./configure时就不用附带这些参数了。
编译
./configure执行无误就可以直接执行make进行编译了,一般不会出什么错误,万一出现问题按照编译提示进行google就可以了
“安装”
所谓的安装可简单认为就是把编译得到的可执行文件、编译出的库文件以及配置文件和头文件等放在指定目录下,此目录默认的为–prefix指定的目录。通常会生成一下几种文件
bin/ 可在目标平台执行的可执行文件
lib/ 静态库和动态库文件以及前面提到的.pc文件。如果有其他项目依赖于编译的包的话,只需要将生成的.pc文件放在其他项目编译时指定的PKG_CONFIG_PATH路径下就可以啦
include/ 这个不必多说
etc/ 可执行文件运行所需的配置文件
此外还可能生成 doc/ share/目录等,不过一般我们不用。