cmake交叉編譯

2021-06-16 16:36:04 字數 2098 閱讀 7660

1

、設定交叉編譯之前,必須在

cmakelist.txt

前面加上這樣一句,這樣

cmake

才會認為你是要交叉編譯:

set(cmake_system_namelinux)

其中linux

是要編譯過去的平台,如果你是在

linux

下交叉編譯

window

的東西,就要寫成

windows

了。我是在

linuxx86

編linuxarm11

,所以直接寫

linux

就可以了。 2

、在通知

cmake

要交叉編譯以後,還要告訴

cmake

到哪個路徑下去找庫檔案,因為在交叉編譯的時候

cmake

是不會自動去系統預設的目錄找庫檔案和標頭檔案的:

set(cmake_find_root_path

"/home/release/arm11/library/gnuarm-4.4.2/")

set(cmake_find_root_path_mode_programnever)

set(cmake_find_root_path_mode_libraryonly)

set(cmake_find_root_path_mode_includeonly)

其中的第一行,是告訴

cmake

查詢的根目錄是什麼。後面分別是告訴

cmake

怎麼查詢編譯時候的工具程式的位置、庫的位置和標頭檔案的位置。設定為

never

表示不查詢,設定為

only

表示只在

cmake_find_root_path

設定的目錄下查詢,設定為

both

(這是預設選項)表示既可以在系統目錄下查詢,也可以在

cmake_find_root_path

下查詢。因為咱們是交叉編譯,所以後兩項的設定了

only

,對於編譯時呼叫工具,一般來說是需要在系統目錄下查詢的,不過我不需要所以設定為

never。

3、設定編譯器:

set(cmake_c_compiler"/usr/local/cross-tools/arm11/bin/linux-gnueabi-gcc")

直接把編譯器的路徑設定過去就可以了,

cmake_c_compiler是c

語言編譯器,

cmake_cxx_compile

是c++

語言編譯器。

4、設定完了這些以後,就要設定一下你的工程所依賴的庫和標頭檔案的位置了,這個很好辦。先在cmakelist.txt

裡找find_package

提到的庫,然後找這些庫對應的find***.cmake

。一般來說,cmakelist.txt

會通過include

引用find***.cmake

所在的目錄的,如果實在沒有線索,就用find-name *.cmake

查詢一把好了。

5、找到find***.cmake

以後,在find_path

和find_library

裡面的路徑上新增上你需要的庫的路徑就可以了。我在上面寫的,就是我自己進行arm11

交叉編譯的路徑,原來的都是系統路徑,比如/usr/include等。6

、完成以後,cmake->make

,就可以了。當然,不會一帆風順,往往是你明明設定了路徑,標頭檔案和庫檔案分明在那裡,可是它偏偏要麼找不到,要麼又找回了系統目錄,那麼這時候可以用message

列印一下,看看是不是沒有執行到find_path

和find_library

,也注意一下cmake_find_root_path_mode_library

和cmake_find_root_path_mode_include

的onlynever

這些有沒有設定正確。最危險的錯誤是,找到是找到了,但是找到的是系統目錄下的庫,這樣cmake

還是正常的,但是編譯是不能通過的,這就需要你認真檢視cmake

的日誌和多列印訊息檢查了。

CMAKE 交叉編譯

步驟需要include open source 的時候,有兩種常見的cross compile 的設定方式 cmake 有公開標準,比較容易自行擴充到不同的平台上 makefile configure all output bin lib 所有要編出來的產物與link方式 有一套cmake語法,與 ...

CMake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。cmake給交叉編...

CMake之交叉編譯

一 引言 很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。二 cm...