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