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

news/2024/9/23 5:48:54/

文章目录

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

0 背景

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

1 安装CMake

## 1. 查看当前cmake版本
[root@localhost ~]# cmake -version
cmake 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 https://cmake.org/files/v3.16/cmake-3.16.6.tar.gz
[root@localhost 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 -version
cmake 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(.)# 动态链接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替换为STATICadd_library(getMatInfo SHAREDgetMatInfo.hgetMatInfo.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} )

http://www.ppmy.cn/news/289332.html

相关文章

‘CMRESHandler‘ object has no attribute ‘_timer‘,socket.gaierror: [Errno 8] nodename nor servname pro

文章目录 1 错误重现2 解决3 调用方法写入es4 扩展 1 错误重现 在Mac上调用Python的CMRESHandler进行elasticsearch的日志写入时,遇到如下错误。一开始还以为是自己的语法出现了错误,排查出发现问题出在库中的代码上。在网上找了一圈都没有发现解决方案…

Ubuntu 18安装nerfstudio教程、踩坑记录

写在最前头!!!配置nerfstudio需要cuda没有cuda请不用往下看了,cuda官方是要求11.3或者11.7我自己用的是阿里云的11.4亲测可用。 一、配置环境 安装anaconda3 去官网或者镜像下载anaconda3 的执行文件 官网:anaconda…

jQuery(一) 选择器

jQuery的基本设计思想和主要方法:选择某个网页元素,然后对其进行某种操作。 $(document) //选择整个文档 $(‘#myId’) //选择IDmyId的网页元素, 如果选择器中包含特殊字符,可以用两个饭反斜杠转义。 $(div.myClass) //选择class为…

Java中的注解

1 . 什么是注解 注解即元数据,就是源代码的元数据,注解在代码中添加信息提供了一种形式化的方法,可以在后续中更方便的 使用这些数据,Annotation是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符。 注解可以用来生成文档;跟…

Android自定义View——实现字母导航栏

思路分析 1、自定义View实现字母导航栏 2、ListView实现联系人列表 3、字母导航栏滑动事件处理 4、字母导航栏与中间字母的联动 5、字母导航栏与ListView的联动 效果展示 实现步骤 1、先看主布局&#xff0c;方便后面代码的说明 <?xml version"1.0" encoding…

二叉查找树(BST)专题

二叉查找树专题 二叉查找树的基本操作查找插入删除 二叉查找树的性质 代码来源&#xff1a;晴神《算法笔记》&#xff01;&#xff01; 二叉查找树的基本操作 查找 void search(node* root, int x){if(root NULL){printf("search failed\n");return;}if(root->…

1086 Tree Traversals Again (25分)

1 题目 1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations a…

HDU 6030(矩阵快速幂+规律)

传送门 题目描述&#xff1a; Happy Necklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1146 Accepted Submission(s): 491 Problem Description Little Q wants to buy a necklace for his girlfriend…