1. 程式人生 > >cmake交叉編譯

cmake交叉編譯

在許多工程下自帶的編譯文字是CMakeLists.txt,
對該檔案,在Windows下可以使用cmake gui進行編譯生成相應庫檔案或可執行檔案
而在linux下可以使用cmake命令生成相應makefile檔案,再執行make命令即可生成相應的庫檔案或者可執行檔案
但是,如果你想直接通過這個CMakeLists.txt檔案,在linux進行交叉編譯,生成arm平臺上的makefile,該怎麼辦?
可以編寫相應的檔案,來指定相應的交叉編譯工具鏈位置即可,比如toolchain.cmake檔案,裡面內容如下:
# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler:指定交叉編譯器路徑
SET(CMAKE_C_COMPILER   /home/bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /home/bin/arm-linux-g++)

# where is the target environment:指定交叉編譯時,系統尋找lib,include,等的根目錄 
SET(CMAKE_FIND_ROOT_PATH  /home//arm/arm-linux/target)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)

在編譯時,只需要執行
cmake path -DCMAKE_TOOLCHAIN_FILE=./toolchain.cmake
即可
path是CMakeLists.txt檔案所在目錄

參考英文網站:
https://cmake.org/Wiki/CMake_Cross_Compiling#Setting_up_the_system_and_toolchain

對應的在CMakeLists.txt檔案中需要設定arm下的標頭檔案目錄,庫檔案目錄,庫檔案等巨集變數:
include_directories,link_directories,link_libraries和target_link_libraries:
這幾個引數的講解:
http://blog.csdn.net/woyebuzhidao888/article/details/44236999
cmake簡單說明:
https://www.mawenbao.com/note/cmake.html

最後會生成一個交叉編譯的makfile,這時直接make即可。