基於cmake的交叉編譯工具鏈

基於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 取值

相關文章
相關標籤/搜索