我們平常使用cmake時,主要是在x86或x86_64平台上,其實cmake在2.6版本後就已經支援交叉編譯了,下面就來看下如何使用cmake進行arm linux程式的交叉編譯。
按照如下結構體建立乙個簡單工程
main.c內容如下,
#include
intmain
(void
)
cmakelists.txt內容如下,
cmake_minimum_required
(version 3.5
)project
(demo)
add_executable
(main main.c)
這是常規的工程,編譯的話只要cd到build目錄下執行cmake .. && make
就可以了。
現在希望最終編譯的程式是執行在arm linux系統上的,這就需要交叉編譯。
1. 設定系統和工具鏈
對於交叉編譯,cmake並不知道目標系統是什麼,所以需要設定一些cmake變數來告知cmake,
對於工具鏈,則是通過下面2個變數來定位,
這些變數可以在呼叫cmake時通過命令列傳遞,但是這種做法容易出錯,而且用起來不方便,所以cmake提供了工具鏈檔案的方式來傳遞這些變數資訊。
2. 工具鏈檔案
我們在工程裡新建乙個檔案叫arm_linux_setup.cmake,放置位置如下(也可以放在別的地方),
其內容如下,
set
(cmake_system_name linux)
set(cmake_system_processor arm)
set(tools /home/wh/work/cross_compile/gcc-linaro-
7.3.1
-2018.05
-x86_64_arm-linux-gnueabihf)
set(cmake_c_compiler $
/bin/arm-linux-gnueabihf-gcc)
set(cmake_cxx_compiler $
/bin/arm-linux-gnueabihf-g++
)
tools是本人使用的交叉工具鏈路徑,可以根據自己的實際檔案來做修改。
3. 編譯
使用cmake的變數cmake_toolchain_file來指定工具鏈檔案,cd到build目錄,然後執行下面的命令,
// 注意,工具鏈檔案的指定一定要緊跟cmake命令之後,不能放到 .. 後面
cmake -dcmake_toolchain_file=..
/arm_linux_setup.cmake .
.
ok後再執行make,就可以生成main的elf檔案,
使用file命令去檢視這個檔案,可以看到其執行平台是32位arm處理器上的linux系統,
使用工具鏈檔案的好處就是只要編寫一遍,然後在任意地方只需要使用cmake_toolchain_file去指定其位置就可以了,非常方便。
cmake交叉編譯
1 設定交叉編譯之前,必須在 cmakelist.txt 前面加上這樣一句,這樣 cmake 才會認為你是要交叉編譯 set cmake system namelinux 其中linux 是要編譯過去的平台,如果你是在 linux 下交叉編譯 window 的東西,就要寫成 windows 了。我是...
CMAKE 交叉編譯
步驟需要include open source 的時候,有兩種常見的cross compile 的設定方式 cmake 有公開標準,比較容易自行擴充到不同的平台上 makefile configure all output bin lib 所有要編出來的產物與link方式 有一套cmake語法,與 ...
CMake交叉編譯配置
很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。cmake給交叉編...