如何構建開源庫的自動編譯

若是咱們要編譯一個開源庫,首先想到去網上搜索,這是最便捷、有效的方式。網上已經幫咱們解決了編譯問題,並且有些咱們預先沒有考慮到的問題它們也一併列出來了。但它們告訴了咱們方法,卻不夠便捷,須要一步步手動操做。做爲一個程序員,咱們是要想辦法讓本身變得愈來愈懶。html

它們如是說

例如,咱們要交叉編譯ortp庫,網上的答案每每是這樣的:linux

$ tar zxvf ortp- 0.13.1.tar.gz  // 解包
$ cd ortp-0.13.1
mkdir /home/net/arm-ortp   // 用戶名爲net
$ CC=arm_v5t_le_gcc ./configure --prefix=/home/net/arm-ortp/ --host=arm-linux --target=arm-linux --disable-static --enable-fixed-point --disable-glib
//須要加上 --disable-glib(禁止glib庫),不然會由於缺乏gthread 等庫而沒法編譯。
$ make clean
$ make
$ make install

構建自動編譯腳本

建立一個名叫ortp的目錄,而後按照如下三步構建三個不一樣的文件。git

首先,咱們構建一個param.mk文件,包含下載的文件名、解壓後目錄的名稱、下載路徑,填寫如下內容:程序員

FILENAME=ortp-0.27.0.tar.gz
DIRNAME=ortp-0.27.0
DOWNLOADURL=http://download.savannah.gnu.org/releases/linphone/ortp/sources/ortp-0.27.0.tar.gz

爲什麼不從下載路徑中截取出文件名?由於咱們下載的不單單是壓縮包,多是從github下載的,或者是經過其它途徑下載的,那麼截取的方式可能並不同。那麼目錄名也是一樣一個道理。github

其次,建立一個編譯的腳本build.sh,內容以下:segmentfault

#!/bin/bash

source param.mk

CURDIR=`pwd`

if [ ! -f ${FILENAME} ]; then
    wget ${DOWNLOADURL}
fi

tar -xzvf ${FILENAME}

mkdir out

# build lib
cd ${DIRNAME}
./configure --prefix=${CURDIR}/out
make
make install
cd ..

cp -rf out/include/* ${CURDIR}/../prebuild/include/ortp
cp out/lib/*.a ${CURDIR}/../prebuild/libs

在編譯的時候,其實能夠寫一個單獨的Makefile,裏面加入更豐富的內容,例如交叉編譯工具。bash

再者,構建一個清理的腳本clean.sh,內容以下:工具

#!/bin/bash

source param.mk

rm -f ${FILENAME}
rm -rf ${DIRNAME}
rm -rf out

編譯多個庫

ortp的同級目錄構建一個build.sh文件,用來編譯各個開源庫。完成以後,就能夠輕鬆完成開源庫的編譯了。ui

參考文章

交叉編譯ortpurl

相關文章
相關標籤/搜索