以FreeType为例来编写一个通用的Makefile文件
一、FreeType的使用
交叉编译就是在一个平台上生成另一个平台上可以执行的代码。
要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链,然后使用这个交叉编译工具链对我们的源代码进行编译,最终生成在目标平台上可以允许的代码,最常见的交叉编译例子:
在Linux PC上,使用arm-linux-gcc编译器编译出在Linux ARM平台上运行的代码。
freetype库是一个完全开源、高质量且可移植的字体引擎,它提供统一的接口来访问多种字体文件,想要在Linux ARM平台上使用freetype库就需要对freetype进行交叉编译,首先需要将freetype-2.4.10.tar.bz2上传到Linux PC的/home/book/freetype目录下:
(1)解压
执行tar xjf freetype-2.4.10.tar.bz2命令进行解压,生成freetype-2.4.10这个目录;
(2)配置
......
首先进入freetype-2.4.10这个目录中,然后执行./config --host=arm-linux命令进行配置;
(3)编译
执行make命令进行编译;
(4)安装
首先创建一个tmp目录,后面就将各种文件安装在该目录下;
然后执行make DESTDIR=$PWD/tmp install命令进行安装,安装成功后在tmp目录的文件如下:
在include目录下是所有的头文件;
在lib目录下是所有的库文件,通常我们只会使用libfreetype.a(静态库)和libfreetype.so(动态库)两个库文件,但libfreetype.so -> libfreetype.so.6.9.0和libfreetype.so.6 -> libfreetype.so.6.9.0表示libfreetype.so和libfreetype.so.6都是链接文件,指向libfreetype.so.6.9.0这个真正的动态库文件。
二、通用Makefile文件的编写
官方给出了C语言版本的代码来教我们如何使用freetype,代码位于example.c文件中,我们就以example.c为例来编写一个通用的Makefile文件,对所有的源文件进行编译来生成一个可执行文件,整个工程的框架如图所示:
include: 用来存放头文件(该头文件对库文件中的函数进行声明);
lib: 用来存放库文件;
out: 用来存放生成的可执行文件;
src: 用来存放源文件和头文件(该头文件对源文件中的函数进行声明)。