CMake交叉編譯

文件目錄

├── CMakeLists.txt
│   ├── cmake
│   │   ├── modules               
│   │   └── toolschain
│   │       └── Tiny4412.cmake    

CMakeLists.txt

在頂層CMakeLists.txt中添加以下命令:

# 添加判斷條件,在編譯時使用如下命令纔會進行交叉編譯,否則調用本機編譯程序,如果有多個目標平臺添加相關判斷即可
# cmake -DCMAKE_BUILD_TARGET=Tiny4412 ..
# cmake -DCMAKE_TOOLCHAIN_FILE=./cmake/Tiny4412.cmake
set(CODE_ROOT_PATH ${CMAKE_SOURCE_DIR})
if(CMAKE_BUILD_TARGET STREQUAL Tiny4412)
    # 設置toolchain文件路徑
    set(CMAKE_TOOLCHAIN_FILE 
        ${CMAKE_SOURCE_DIR}/cmake/toolschain/Tiny4412.cmake)
endif()

交叉編譯環境配置

Tiny4412.cmake內容如下:

# 設置目標系統
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 設置工具鏈目錄
set(TOOL_CHAIN_DIR /usr/local/arm/4.4.3)
set(TOOL_CHAIN_INCLUDE 
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/sys-root/usr/include
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/include
)
set(TOOL_CHAIN_LIB 
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/sys-root/usr/lib
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/lib
)

# 設置編譯器位置
set(CMAKE_C_COMPILER "arm-linux-gcc")
set(CMAKE_CXX_COMPILER "arm-linux-g++")

# 設置Cmake查找主路徑
set(CMAKE_FIND_ROOT_PATH ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi)

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_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

include_directories(
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/include
    ${TOOL_CHAIN_DIR}/arm-none-linux-gnueabi/sys-root/usr/include
)

set(CMAKE_INCLUDE_PATH 
    ${TOOL_CHAIN_INCLUDE}
)

set(CMAKE_LIBRARY_PATH 
    ${TOOL_CHAIN_LIB}
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章