开发环境
操作系统: 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目录中使用这个脚本。
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脚本指定安装路径的时候,打开install_manifest.txt发现路径被安装到了/usr/local下,但是我已经在脚本中指定了安装的目录,没有生效。最后我直接在执行cmake的时候从命令行传递安装路径宏进去。
cmake -DCMAKE_TOOLCHAIN_FILE=../imx6ull.cmake -DCMAKE_INSTALL_PREFIX=xxx/opencv-install/ ..