目錄
一、內容
二、配置
1. 準備cmake文件
2. 使用交叉編譯
三、驗證
1. 構建階段驗證
2. 編譯階段驗證
一、內容
目的:在X86環境下編譯ARM平臺軟件
-
編寫交叉編譯配置文件:xx.cmake
-
執行cmake命令時指定:cmake \ -DCMAKE_TOOLCHAIN_FILE=“xx.cmake”
-
編譯:make -j8
-
驗證:make clear && make VERBOSE=1
二、配置
1. 準備cmake文件
(1)CMAKE官方例子
(2)自己項目例子
以配置一個nvidia orin的交叉編譯工具鏈為例
編寫cmake文件 gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake
#?常規配置
set(CMAKE_SYSTEM_NAME?Linux)
set(CMAKE_SYSTEM_VERSION?1)
set(CMAKE_SYSTEM_PROCESSOR?arm)#?1.?添加gcc?g++編譯器目錄
#?maybe?not?work,?you?should?export?CC?and?CXX?to?real?compile?path
set(CMAKE_C_COMPILER?"/l4t/toolchain/bin/aarch64-linux-gcc")
set(CMAKE_CXX_COMPILER?"/l4t/toolchain/bin/aarch64-linux-g++")#?2.?設置系統路徑,即gcc的--sysroot參數
#???--sysroot=<directory>????Use?<directory>?as?the?root?directory?for?headers
#???????????????????????????and?libraries.
#?這個目錄下有arm平臺的系統include目錄以及系統lib目錄
set(CMAKE_SYSROOT?/l4t/toolchain/aarch64-linux-gnu/)#?3.?設置額外的路徑
#?例如除了系統庫目錄,還需要添加額外的目錄
#?如果你只需要交叉編譯環境的系統路徑,就不需要這一步#?3.1?可選:如果有必要,添加額外的頭文件查找路徑(例如libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libdrm)#?3.2?可選:如果有必要,添加額外的庫文件查找路徑(例如libabc)
add_link_options(-L/opt/open_explorer/samples/abc/lib)
add_link_options(-L/opt/open_explorer/samples/drm/lib)#?4.?可選:添加其他的CMake編譯選項
#?實際上,這個文件可以添加任何CMake語法
#?但是,一般情況這個文件只用于配置必要的交叉編譯器和交叉編譯系統目錄
2. 使用交叉編譯
在使用cmake生成項目的時候
通過CMAKE的-DCMAKE_TOOLCHAIN_FILE指定交叉編譯工具鏈的cmake文件
cmake?\-DCMAKE_TOOLCHAIN_FILE="./cmake/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake"?\-DCMAKE_INSTALL_PREFIX="./output"?\-DCMAKE_BUILD_TYPE=Release
三、驗證
1. 構建階段驗證
構建開始時CMAKE會打印編譯器版本信息
可以看到打印的編譯器路徑和我們設置的一致
2. 編譯階段驗證
構建完成之后
我們使用make VERBOSE=1 打印詳細的編譯命令
make?VERBOSE=1
可以看出打印出來的編譯命令中可以設置的sysroot參數
同樣也可以看到通過 add_compile_options 添加的 -L 和 add_link_options 添加的鏈接選項
非科班程序員,日拱一卒
一起學習,一起進步