基於cmake的交叉編譯工具鏈
1、基本概念 1. 什麼是交叉編譯linux
交叉編譯是A機器上編譯生成,運行在B機器上。兩個機子有不一樣的機器指令。
2. 什麼是宿主機和目標機架構
宿主機(host)是指使用交叉編譯工具鏈執行編譯的主機,通常配置較高,如PC主機;目標機(target)是指運行交叉編譯出的可執行程序的機器,通常資源有限,如嵌入式開發板。
3. 什麼是工具鏈工具
工具鏈通常是由編譯器、鏈接器、解釋器和調試器組成,同時也包括目標機器的頭文件、庫文件等編譯資源。
4. cmake 工具鏈變量ui
2、編譯流程spa
3、編譯方法 1. cmake 命令行編譯操作系統
命令命令行
# 經過 CMAKE_TOOLCHIAIN_FILE 指定交叉編譯工具鏈文件 cmake -D CMAKE_TOOLCHIAIN_FILE="/path/to/my-cmake-toolchain-file.cmake" ..
交叉編譯工具鏈文件爲一個後綴爲.cmake文件的cmake文件。調試
2. cmake-gui 圖形界面編譯code
此處待完善...blog
4、cmake 工具鏈變量詳解 1. 目標系統變量
CMAKE_SYSTEM_NAME 目標機所在操做系統名稱
目標機所在操做系統名稱
不一樣系統取值:Linux、Android、QNX、WindowsCE、WindowsPhone、WindowsStore(Windows10 or Windows Store)
CMAKE_SYSTEM_PROCESSOR
目標系統的硬件或CPU架構
不一樣CPU架構取值:arm(ARM)、x86(X86)
2. 交叉編譯器
CMAKE_C_COMPILER
目標系統的C語言編譯器
這裏能夠將變量設置成完整路徑或者文件名
CMAKE_CXX_COMPILER
目標系統的C++語言編譯器
這裏能夠將變量設置成完整路徑或者文件名
3. 外部依賴庫
CMAKE_FIND_ROOT_PATH
表明了目標板使用的一系列相關文件夾路徑的根路徑
CMAKE_FIND_ROOT_PATH_MODE_XXX 均在此根路徑及其子目錄下查找
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
指定交叉編譯時可執行程序的搜索模式
通常取值 NEVER 或 ONLY
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
指定交叉編譯時頭文件的搜索模式
通常取值 ONLY
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
指定交叉編譯時庫文件的搜索模式
通常取值 ONLY
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
指定交叉編譯時開發包的搜索模式
通常取值 ONLY
交叉編譯搜索模式
NEVER 表示不在你 CMAKE_FIND_ROOT_PATH 設置的目錄下進行查找
ONLY 表示僅在你 CMAKE_FIND_ROOT_PATH 設置的目錄下進行查找
BOTH 表示先在你 CMAKE_FIND_ROOT_PATH 設置的目錄下進行查找再查找全局路徑
5、應用場景 1. 官方示例
# Linux 交叉編譯工具鏈文件 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs) set(CMAKE_STAGING_PREFIX /home/devel/stage) set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf) set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
二、簡單示例
文件結構
文件內容
toolchain.cmake
CMakeLists.txt
main.cpp
編譯方法
命令行編譯
圖形界面編譯
6、參考連接
交叉工具鏈
CMake交叉編譯
CMAKE_SYSTEM_NAME 取值