日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql交叉编译 cmake_CMake交叉编译配置

發布時間:2023/12/4 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql交叉编译 cmake_CMake交叉编译配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

CMake給交叉編譯預留了一個很好的變量即CMAKE_TOOLCHAIN_FILE,它定義了一個文件的路徑,這個文件即toolChain,里面set了一系列你需要改變的變量和屬性,包括C_COMPILER,CXX_COMPILER,如果用Qt的話需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的話需要更改的BOOST_ROOT(具體查看相關Findxxx.cmake里面指定的路徑)。CMake為了不讓用戶每次交叉編譯都要重新輸入這些命令,因此它帶來toolChain機制,簡而言之就是一個cmake腳本,內嵌了你需要改變以及需要set的所有交叉環境的設置。

這里面也牽扯了一些相關的變量設置,在這里簡單介紹下幾個比較重要的

1.CMAKE_SYSTEM_NAME: 即你目標機target所在的操作系統名稱,比如ARM或者Linux你就需要寫"Linux",如果Windows平臺你就寫"Windows",如果你的嵌入式平臺沒有相關OS你即需要寫成"Generic",只有當CMAKE_SYSTEM_NAME這個變量被設置了,CMake才認為此時正在交叉編譯,它會額外設置一個變量CMAKE_CROSSCOMPILING為TRUE.

2. CMAKE_C_COMPILER: 顧名思義,即C語言編譯器,這里可以將變量設置成完整路徑或者文件名,設置成完整路徑有一個好處就是CMake會去這個路徑下去尋找編譯相關的其他工具比如linker,binutils等,如果你寫的文件名帶有arm-elf等等前綴,CMake會識別到并且去尋找相關的交叉編譯器。

3. CMAKE_CXX_COMPILER: 同上,此時代表的是C++編譯器。

4. CMAKE_FIND_ROOT_PATH: 代表了一系列的相關文件夾路徑的根路徑的變更,比如你設置了/opt/arm/,所有的Find_xxx.cmake都會優先根據這個路徑下的/usr/lib,/lib等進行查找,然后才會去你自己的/usr/lib和/lib進行查找,如果你有一些庫是不被包含在/opt/arm里面的,你也可以顯示指定多個值給CMAKE_FIND_ROOT_PATH,比如

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

5.? CMAKE_FIND_ROOT_PATH_MODE_PROGRAM: 對FIND_PROGRAM()起作用,有三種取值,NEVER,ONLY,BOTH,第一個表示不在你CMAKE_FIND_ROOT_PATH下進行查找,第二個表示只在這個路徑下查找,第三個表示先查找這個路徑,再查找全局路徑,對于這個變量來說,一般都是調用宿主機的程序,所以一般都設置成NEVER

6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY: 對FIND_LIBRARY()起作用,表示在鏈接的時候的庫的相關選項,因此這里需要設置成ONLY來保證我們的庫是在交叉環境中找的.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE: 對FIND_PATH()和FIND_FILE()起作用,一般來說也是ONLY,如果你想改變,一般也是在相關的FIND命令中增加option來改變局部設置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

8. BOOST_ROOT: 對于需要boost庫的用戶來說,相關的boost庫路徑配置也需要設置,因此這里的路徑即ARM下的boost路徑,里面有include和lib。

9. QT_QMAKE_EXECUTABLE: 對于Qt用戶來說,需要更改相關的qmake命令切換成嵌入式版本,因此這里需要指定成相應的qmake路徑(指定到qmake本身)

下面貼上相關demo,讓同學可以更清晰的看到相應配置。

# this is required

SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler

SET(CMAKE_C_COMPILER/opt/arm/usr/bin/ppc_74xx-gcc)

SET(CMAKE_CXX_COMPILER/opt/arm/usr/bin/ppc_74xx-g++)

# where is the target environment

SET(CMAKE_FIND_ROOT_PATH/opt/arm/ppc_74xx /home/rickk/arm_inst)

# searchfor programs inthe build host directories (not necessary)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

#for libraries and headers inthe target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# configure Boost and Qt

SET(QT_QMAKE_EXECUTABLE/opt/qt-embedded/qmake)

SET(BOOST_ROOT/opt/boost_arm)

這樣就完成了相關toolChain的編寫,之后,你可以靈活的選擇到底采用宿主機版本還是開發機版本,之間的區別僅僅是一條-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做轉移,但目標平臺是同一個,你僅僅需要寫一份toolChain放在一個地方,就可以給所有工程使用。

CMake交叉編譯配置就介紹到這,轉移之間我來博客園也2個多月了,感受頗多,希望你會喜歡這篇文章 : ) 并且給我一點鼓勵。

參考鏈接: http://www.cmake.org/Wiki/CMake_Cross_Compiling

總結

以上是生活随笔為你收集整理的mysql交叉编译 cmake_CMake交叉编译配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。