CMake安装、配置编译C++代码(Mac、Linux)————附带详细步骤和代码

网友投稿 476 2022-09-03

CMake安装、配置编译C++代码(Mac、Linux)————附带详细步骤和代码

文章目录

​​0 背景​​​​1 安装CMake​​​​2 使用CMakefile.txt编译C++程序​​

0 背景

因为需要使用cmake来进行跨平台编译,所以根据网上的资料学习和总结成此文。

1 安装CMake

## 1. 查看当前cmake版本[root@localhost ~]# cmake -versioncmake version 2.8.12.2## 2. 进行卸载[root@localhost ~]# yum remove -y cmake## 3. 进行安装包的下载,也可以下载好安装包后传至相应的目录[root@localhost ~]# mkdir /opt/cmake[root@localhost ~]# cd /opt/cmake/## 4. 下载或拷贝,解压[root@localhost cmake]# wget cmake]# tar -zxvf cmake-3.16.6.tar.gz## 5. 安装基本工具[root@localhost cmake]# yum install -y gcc gcc-c++ ## 6. 进行编译连接[root@localhost cmake]# cd cmake-3.16.6 && ./configure --prefix=/usr/local/cmake## 7. 安装[root@localhost cmake-3.16.6]# make && make install ## 8. 创建链接[root@localhost cmake-3.16.6]# ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake ## 9. 查看版本[root@localhost cmake-3.16.6]# cmake -versioncmake version 3.16.6CMake suite maintained and supported by Kitware (kitware.com/cmake).

升级gcc/g++,如果不升级,可能会遇到​​@GLIBCX​​的问题。

yum -y install centos-release-sclyum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutilsscl 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(.)# 动态链接opencvfind_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)#动态链接opencvtarget_link_libraries(dealImage ${OpenCV_LIBS} )

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是品牌营销?企业有必要做品牌营销吗?(品牌营销有什么作用)
下一篇:Nginx 学习 常用链接汇总
相关文章

 发表评论

暂时没有评论,来抢沙发吧~