1. 程式人生 > >【makefile】多平臺編譯以及makefile自動化編譯總結

【makefile】多平臺編譯以及makefile自動化編譯總結

Date: 2018.9.30


1、前言

    同一套庫程式碼往往需要在不同體系架構或系統上的機器和裝置上編譯和執行,這就需要我們熟悉不同平臺上的編譯方法以及測試方法,本文旨在講述多平臺編譯方法以及makefile自動化編譯的總結。

2、多平臺編譯之Windows平臺

體系架構:Intel x86
系統核心:Windows
系統型別:win32,x64
Windows平臺編譯方法:通過批處理指令碼命令列編譯VS工程

3、多平臺編譯之Linux平臺

體系架構:Intel x86
系統核心:Linux
系統型別:linux32,linux64
Linux平臺編譯方法:

makefile工程編譯模板

4、多平臺編譯之Mac平臺

體系架構:Intel x86
系統核心:Darwin
系統型別:mac32,mac64
Mac平臺編譯方法:mac和ios通用編譯環境

5、多平臺編譯之IOS平臺

體系架構:armv7,armv7s,arm64
系統核心:Darwin
系統型別:ios32,ios64
ios平臺編譯方法:mac和ios通用編譯環境

6、多平臺編譯之Android平臺

體系架構:arm,x86,mips
系統核心:Linux
系統型別:armeabi,armeabi-v7a,arm64-v8a,x86,x86-64,mips,mips64
Android平臺編譯方法:

Android平臺通用編譯環境
Android平臺真機測試方法:android真機測試方法

7、多平臺編譯之ARM平臺

體系架構:arm
系統核心:Linux
系統型別:armv7,armv8
ARM平臺編譯方法:makefile工程編譯模板
ARM平臺測試指令碼:編解碼器一致性驗證和效能測試自動化指令碼

8、多平臺編譯之NACL平臺

參考:
https://blog.gmem.cc/chrome-native-client-study-note
http://www.iteye.com/news/26298
http://www.360doc.com/content/15/0127/13/9200790_444163734.shtml#

NACL介紹:Native Client
NaCl是一種在瀏覽器中安全的與執行平臺無關的、不受信任程式碼的開源沙盒技術,它允許計算密集型、互動性的實時Web應用有效的利用機器的物理效能,並同時保證安全性。NaCl本質上是一個程序內PPAPI外掛。

一個NaCl應用程式包含:JavaScript、HTML、CSS、以及一個NaCl模組。目前NaCl SDK支援的語言主要是C和C++。

NaCl SDK是用於開發NaCl可執行檔案(nexe)的工具包。由一系列GNU工具鏈組成,包括 gcc, binutils、gdb等。

體系架構:x86或arm
NACL平臺編譯方法:
(1)準備工作:
安裝NACL sdk: https://developer.chrome.com/native-client/sdk/download
https://maxwoods.ctfile.com/fs/GiQ148351151
https://maxwoods.ctfile.com/fs/r2D150855035
並配置系統變數NACL_SDK_ROOT路徑為NACL SDK的pepper版本路徑。
安裝python並把python的安裝目錄新增到path系統變數中。
(2)編寫makefile採用工具鏈進行編譯:
上層makefile:

${NACL_SDK_ROOT}\tools\make.exe -C dec_lib -f Makefile PLATFROM=nacl_32

make.bat:

@%NACL_SDK_ROOT%\tools\make.exe %*

dec_lib目錄下的Makefile部分,其他部分與普通makefile一樣:

# x86_64
ifeq ($(strip $(PLATFORM)),nacl_64)
CROSS=x86_64
endif
# i686
ifeq ($(strip $(PLATFORM)),nacl_32)
CROSS=i686
endif

ARCH=x86
CPLATFORM=glibc
VALID_TOOLCHAINS := glibc pnacl win newlib arm
include ${NACL_SDK_ROOT} /tools/common.mk
# tool configure
CC := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-gcc.exe
LD := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-ld.exe
AR := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-ar.exe
AS := ${NACL_SDK_ROOT}/toolchain/win_${ARCH}_${CPLATFORM}/bin/${CROSS}-nacl-as.exe
RM := rm -f

9、makefile自動化編譯總結

(1)makefile中使用shell命令:

$(shell chmod +x ./gas-preprocesor.pl)

(2)makefile中的幾種用法:

OBJT=\$(addprefix $(TMP_DIR)/, $(notdir $(OBJS)))
$(@F)  等效於  $(notdir [email protected])  獲取實際檔名
$(filter %.a, $(LIB))

(3)makefile工程編譯模板

https://blog.csdn.net/SoaringLee_fighting/article/details/82594605

持續更新ing


THE END!