文章目录
- 0 背景
- 1 安装CMake
- 2 使用CMakefile.txt编译C++程序
0 背景
因为需要使用cmake来进行跨平台编译,所以根据网上的资料学习和总结成此文。
1 安装CMake
[root@localhost ~]
cmake version 2.8.12.2
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost cmake]
[root@localhost cmake]
[root@localhost cmake]
[root@localhost cmake]
[root@localhost cmake-3.16.6]
[root@localhost cmake-3.16.6]
[root@localhost cmake-3.16.6]
cmake version 3.16.6
CMake suite maintained and supported by Kitware (kitware.com/cmake).
升级gcc/g++,如果不升级,可能会遇到@GLIBCX
的问题。
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash #启动gcc9
你要哪个版本的就把第2条命令中的数字8改成你要的主版本号就可以了。这样升级到的是最新的版本。例如8升级到的是8.2.0而不是8.1。
通过scl命令启动gcc,这个只是暂时的,当你的shell关闭后或者重启就会恢复原来的版本,要想一直使用升级后的版本可以使用如下命令:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
2 使用CMakefile.txt编译C++程序
示例的CMakeLists.txt的文件如下(以下的测试例子,在mac和linux上均运行成功):
# 设置cmake版本
cmake_minimum_required(VERSION 3.15)
# 设置项目名
project(getMatInfo)
# 设置c++版本
set(CMAKE_CXX_STANDARD 11)
# 设置工作路径
include_directories(${PROJECT_SOURCE_DIR})
include_directories(.)
# 动态链接opencv
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS})
# 打印变量信息
# MESSAGE( STATUS "opencv lib = ${OpenCV_LIBS}.")
# STATUS = 非重要消息;
# WARNING = CMake 警告, 会继续执行;
# AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
# SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
# FATAL_ERROR = CMake 错误, 终止所有处理过程;
# 链接动态链接库(方法1)
# linux下的目录(/usr/local/Polyspace/R2021a/bin/glnxa64/)
LINK_LIBRARIES("/Applications/MATLAB_R2022a.app/bin/maci64/libeng.dylib"
"/Applications/MATLAB_R2022a.app/bin/maci64/libmx.dylib"
"/Applications/MATLAB_R2022a.app/bin/maci64/libmat.dylib"
"/Applications/MATLAB_R2022a.app/bin/maci64/libmex.dylib")
# 链接动态链接库(方法2)
#LINK_DIRECTORIES(/Applications/MATLAB_R2022a.app/bin/maci64)
# 编译运行文件(和编译动态链接库,只能存在一个)
// add_executable(getMatInfo
// getMatInfo.h
// getMatInfo.cpp)
# 编译动态链接库
# 如果不填写SHARE,默认为静态链接库,或者把SHARED替换为STATIC
add_library(getMatInfo SHARED
getMatInfo.h
getMatInfo.cpp)
# 链接动态链接库(方法2)
#target_link_libraries(getMatInfo mx mat mex eng )
#target_link_libraries(getMatInfo -lmx -lmat -lmex -leng )
#target_link_libraries(getMatInfo libeng.dylib libmx.dylib libmat.dylib libmex.dylib)
#动态链接opencv
target_link_libraries(dealImage ${OpenCV_LIBS} )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)