Cmake交叉编译opencv

340 阅读1分钟

开发环境

操作系统: Ubuntu16.04

开发板: i.MX6ULL Linux阿尔法开发板

交叉编译工具: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf

因为需要做opencv的qt应用移植到开发板上,在这里需要交叉编译opencv。官方提供的是cmake源码编译,网上搜到的解决方案都是用cmake-gui应用配置交叉编译器,这里想直接写一个cmake脚本来编译。

交叉编译脚本文件

一开始想着直接暴力修改CMakeLists.txt的编译器配置,太麻烦了,觉得肯定有其他办法。找到了cmake官方关于交叉编译的文档

在opencv目录下创建一个imx6ull.cmake脚本,准备在build目录中使用这个脚本。

image.png

cmake脚本如下

set(CMAKE_SYSTEM_NAME Linux)

set(TOOLCHAIN_DIR  /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf)

# 交叉编译器
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
set(CMAKE_EXE_LINKER_FLAGS "-lpthread -lrt -ldl")

# 指定交叉编译器环境
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}/bin)

# 修改查找头文件和库文件还有其他程序的行为
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_INSTALL_PREFIX <自定义指定安装路径, 否则默认安装到/usr下>)

执行cmake配置makefile编译

mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../imx6ull.cmake ..

image.png

问题

在cmake脚本指定安装路径的时候,打开install_manifest.txt发现路径被安装到了/usr/local下,但是我已经在脚本中指定了安装的目录,没有生效。

最后我直接在执行cmake的时候从命令行传递安装路径宏进去

cmake -DCMAKE_TOOLCHAIN_FILE=../imx6ull.cmake -DCMAKE_INSTALL_PREFIX=xxx/opencv-install/ ..