交叉編譯環境下的CmakeList(demo)

July 26, 2016
作者:dengshuai_super
出處:http://blog.csdn.net/dengshuai_super/article/details/52038970
聲明:轉載請註明作者及出處。


CMake在ubuntu系統下默認使用系統的gcc、g++編譯器,編譯arm下的程序要使用arm-linux-gcc,需要對CMake進行設置(通過在CMakeLists.txt中指定交叉編譯器的方法)。
在CMakeLists.txt一開始加入相關設置:
#告知當前使用的是交叉編譯方式,必須配置
SET(CMAKE_SYSTEM_NAME Linux)

#指定C交叉編譯器,必須配置
#或交叉編譯器使用絕對地址
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)

Ubuntu下的CMakeList文件:

1.build CMakeList of the thidrparty.a

## build CMakeList of the thidrparty.a
cmake_minimum_required(VERSION 3.1.0)
project(thirdparty)

#TODO :<
# c++11 required
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#TODO/>

# OpenVC3 required
find_package(OpenCV 3.1.0 REQUIRED)

# where to find header files
include_directories(${OpenCV_INCLUDE_DIRS})

# sources to be compiled
set(SOURCE_FILES
        xmlParser/xmlParser.cpp
        textDetect/erfilter.cpp
        LBP/helper.cpp
        LBP/lbp.cpp
        mser/mser2.cpp
        )

# pack objects to static library
add_library(thirdparty STATIC ${SOURCE_FILES})

2. build CMakeList of the executable file

## build CMakeList of the executable file
cmake_minimum_required(VERSION 3.1.0)
project(easypr)

# c++11 required
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
  set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/opt/opencv3")
endif ()

# OpenVC3 required
find_package(OpenCV 3.1.0 REQUIRED)

# where to find header files
include_directories(.)
include_directories(include)
include_directories(${OpenCV_INCLUDE_DIRS})

# sub directories
add_subdirectory(thirdparty)

# sources to be compiled
set(SOURCE_FILES
        src/core/core_func.cpp
        src/core/chars_identify.cpp
        src/core/chars_recognise.cpp
        src/core/chars_segment.cpp
        src/core/feature.cpp
        src/core/plate_detect.cpp
        src/core/plate_judge.cpp
        src/core/plate_locate.cpp
        src/core/plate_recognize.cpp
        src/core/params.cpp

        src/train/ann_train.cpp
        src/train/svm_train.cpp
        src/train/train.cpp

        src/preprocess/deface.cpp
        src/preprocess/gdts.cpp
        src/preprocess/mc_data.cpp

        src/util/util.cpp
        src/util/program_options.cpp
        src/util/kv.cpp
        )

# pack objects to static library
add_library(easypr STATIC ${SOURCE_FILES})

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
  set(EXECUTABLE_NAME "demo_darwin_amd64")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
  set(EXECUTABLE_NAME "demo_linux_amd64")
endif ()

# test cases
add_executable(${EXECUTABLE_NAME} test/main.cpp)
# link opencv libs
target_link_libraries(${EXECUTABLE_NAME} easypr thirdparty ${OpenCV_LIBS})

交叉編譯環境的CMakeList文件:

1.build CMakeList of the thidrparty.a

## build CMakeList of the thidrparty.a
cmake_minimum_required(VERSION 3.1.0)
project(thirdparty_arm)

# c++11 required
set(CMAKE_CXX_STANDARD 11)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)

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

#TODO:指定C交叉編譯器,必須配置 TODO:或交叉編譯環境器使用絕對地址。
SET(CMAKE_C_COMPILER "/home/ds/arm-2013.05/bin/arm-none-linux-gnueabi-gcc")

#TODO:指定C++交叉編譯器,必須配置 TODO:或交叉編譯環境器使用絕對地址。
SET(CMAKE_CXX_COMPILER "/home/ds/arm-2013.05/bin/arm-none-linux-gnueabi-g++")

#TODO:添加頭文件路徑
include_directories(.)
include_directories("/home/ds/build/opencv-3.1.0/install/include/opencv")
include_directories("/home/ds/build/opencv-3.1.0/install/include")

#TODO:添加opencv動態鏈接庫路徑
LINK_DIRECTORIES("/home/ds/build/opencv-3.1.0/install/lib")

# OpenVC3 required
#find_package(OpenCV 3.1.0 REQUIRED)

#TODO: ds add 
#set(CV_INCLUDE_DIRS 
#            -I/home/ds/build/opencv-3.1.0/install/include
#            -I/home/ds/build/opencv-3.1.0/install/include/opencv
#)

# where to find header files
#include_directories(${OpenCV_INCLUDE_DIRS})
#include_directories(${CV_INCLUDE_DIRS})

# sources to be compiled
set(SOURCE_FILES
        xmlParser/xmlParser.cpp
        textDetect/erfilter.cpp
        LBP/helper.cpp
        LBP/lbp.cpp
        mser/mser2.cpp
        )

# pack objects to static library
add_library(thirdparty_arm STATIC ${SOURCE_FILES})

2. build CMakeList of the executable file

## build CMakeList of the executable file
cmake_minimum_required(VERSION 3.1.0)
project(easypr)

# c++11 required
#set(CMAKE_CXX_STANDARD 11)   #c++11標準也可以在這裏設置
#set(CMAKE_CXX_STANDARD_REQUIRED ON)


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

#TODO:指定C交叉編譯器,必須配置 TODO:或交叉編譯環境器使用絕對地址。
SET(CMAKE_C_COMPILER "/home/ds/arm-2013.05/bin/arm-none-linux-gnueabi-gcc")

#TODO:指定C++交叉編譯器,必須配置 TODO:或交叉編譯環境器使用絕對地址。
SET(CMAKE_CXX_COMPILER "/home/ds/arm-2013.05/bin/arm-none-linux-gnueabi-g++")

#TODO :添加從c++11
add_compile_options(-std=c++11)

#if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
#  set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/opt/opencv3")
#endif ()

# OpenVC3 required
find_package(OpenCV 3.1.0 REQUIRED)

# where to find header files
include_directories(.)
include_directories(include)
#include_directories(${OpenCV_INCLUDE_DIRS})
#TODO:添加頭文件路徑
include_directories("/home/ds/build/opencv-3.1.0/install/include/opencv")
include_directories("/home/ds/build/opencv-3.1.0/install/include")

#TODO:添加opencv動態鏈接庫路徑
LINK_DIRECTORIES("/home/ds/build/opencv-3.1.0/install/lib")

# sub directories
add_subdirectory(thirdparty)

# sources to be compiled
set(SOURCE_FILES
        src/core/core_func.cpp
        src/core/chars_identify.cpp
        src/core/chars_recognise.cpp
        src/core/chars_segment.cpp
        src/core/feature.cpp
        src/core/plate_detect.cpp
        src/core/plate_judge.cpp
        src/core/plate_locate.cpp
        src/core/plate_recognize.cpp
        src/core/params.cpp

        src/train/ann_train.cpp
        src/train/svm_train.cpp
        src/train/train.cpp

        src/preprocess/deface.cpp
        src/preprocess/gdts.cpp
        src/preprocess/mc_data.cpp

        src/util/util.cpp
        src/util/program_options.cpp
        src/util/kv.cpp
        )

# pack objects to static library
add_library(easypr STATIC ${SOURCE_FILES})

if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
  set(EXECUTABLE_NAME "demo_darwin_amd64")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
  set(EXECUTABLE_NAME "demo_arm_linux")
endif ()

# test cases
add_executable(${EXECUTABLE_NAME} test/main.cpp)
# link opencv libs,指定在鏈接目標文件的時候需要鏈接到外部庫,其效果類似gcc的編譯參數“-l”,可以解決外部庫的依賴問題。
target_link_libraries(${EXECUTABLE_NAME} easypr thirdparty_arm -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core -ldl -lm -lpthread -lrt)

注意:我這裏用到了opencv的庫,因此交叉編譯環境下的CMakeList要添加opencv動態鏈接庫路徑。

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