使用 cmake 進行交叉編譯


cmake 因為“又”要額外學一門語言而被詬病,但這並不妨礙越來越多私人項目用 cmake 來管理;autoconfig 確實是更好的發行工具,但用 cmake 管理項目顯然更加的容易。如果要應用這些 cmake 管理的項目到嵌入式環境中,必然涉及交叉編譯的問題。

這些項目交叉編譯,主要是設置一些環境變量。

這些設定可以寫成一個 .cmake 文件,1) 需要交叉編譯時 include ,2)或者直接把這些配置寫到 CMakeLists.txt 文件的開始位置。兩種方法是等效的。

用下面語句應用寫好的配置。

include (cross.cmake)

下面是收集的幾個針對 arm 平台的交叉編譯配置,參考這兩個配置,根據自己平台的不同,進行定制修改即可。(感覺直接制定編譯器即可?待驗證)

配置1

SET(CROSS_COMPILE 1)

IF(CROSS_COMPILE) 
  
SET(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/home/zchx/Tools/opt/FriendlyARM/toolschain/4.5.1")

set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-g++)
set(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/arm-linux-gcc)
set(GNU_FLAGS "-mfpu=vfp -fPIC")
set(CMAKE_CXX_FLAGS "${GNU_FLAGS} ")
set(CMAKE_C_FLAGS "${GNU_FLAGS}  ")


SET(CMAKE_FIND_ROOT_PATH  ${TOOLCHAIN_DIR}
 ${TOOLCHAIN_DIR}/arm-none-linux-gnueabi/include
 ${TOOLCHAIN_DIR}/arm-none-linux-gnueabi/lib )

include_directories(/usr/local/Trolltech/QtEmbedded-4.8.5-arm/include/)
include_directories(/home/zchx/Downloads/boost_1_49_0_arm)
link_directories(/home/zchx/Downloads/boost_1_49_0_arm/stage/lib)
link_directories(/home/zchx/Downloads/ffmpeg-1.0.8-arm/ffmpeglib/)
link_directories(/usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib)
link_directories(/home/zchx/Downloads/live_arm/BasicUsageEnvironment/)
link_directories(/home/zchx/Downloads/live_arm/groupsock/)
link_directories(/home/zchx/Downloads/live_arm/liveMedia/)
link_directories(/home/zchx/Downloads/live_arm/UsageEnvironment/)
  
ENDIF(CROSS_COMPILE)

配置2

#告知當前使用的是交叉編譯方式,必須配置
SET(CMAKE_SYSTEM_NAME Linux)

#指定編譯工具,一定要設置
#或交叉編譯器使用絕對地址
SET(CMAKE_C_COMPILER "arm-linux-gcc")
#指定C++交叉編譯器
SET(CMAKE_CXX_COMPILER "arm-linux-g++")
 
#不一定需要設置
#指定交叉編譯環境安裝目錄...
SET(CMAKE_FIND_ROOT_PATH "...")
#從來不在指定目錄下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#只在指定目錄下查找庫文件
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#只在指定目錄下查找頭文件
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

 配置3

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm) SET(TOOLCHAIN_DIR "/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le") SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}) 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_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm_v5t_le-gcc) SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm_v5t_le-g++)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM