Linux的c++环境配置与cmake的使用

2023-05-16

  • Ubuntu18.04安装

    • 虚拟机安装

      虚拟机软件版本:VMware® Workstation 16 Pro

      版本号:Ubuntu18.04

      安装参考:http://t.csdn.cn/P71XR

      虚拟机分辨率自适应问题参考:http://t.csdn.cn/LDvo5

    • C++程序编译器环境搭建

      在主文件夹建立一个新的文件夹,命名为slambook,在此文件夹中进入终端,新建cpp文件:

      touch main.cpp
      

      打开文件,输写一个简单的程序验证是否安装了编译器:

      #include <iostream>
      using namespace std;
      
      int main(int argc,char **argv){
      	cout<<"Hello SLAM"<<endl;
      	return 0;
      }
      

      关闭编辑器,安装g++编译器,并用g++编译器把C++文件编译成可执行文件,在终端输入:

      sudo apt-get install g++
      g++ main.cpp
      

      出现了一个a.out的文件,在终端输入:

      ./a.out
      Hello SLAM!
      

      即可正常运行C++文件。

      • 实现虚拟机与主机复制粘贴功能

        参考博客:http://t.csdn.cn/40gBi

    • 使用cmake

      新建一个CMakeLists.txt文件:

      touch CMakeLists.txt
      

      在CMakeLists.txt文件中写入:

      # 声明要求的cmake的最低版本
      cmake_minimum_required( VERSION 2.8 )
      
      # 声明一个cmake工程
      project( helloslam )
      
      # 添加一个可执行程序
      # 语法:add_executable( 程序名 源代码文件 )
      add_executable( main main.cpp )
      

      在当前目录下进入终端,调用cmake进行编译:

      cmake .
      

      运行结果如下所示:

      在这里插入图片描述

      然后用make指令对工程进行编译:

      make
      

      结果如图所示:

      在这里插入图片描述

      此时生成了一个main文件(在CMakeList.txt文件中声明的那个可执行程序的名字),执行他:

      % ./main
      Hello SLAM!
      

      到此就能够运行文件了。

      为了让中间文件放在一个中间目录中,更常用的编译cmake工程的做法如下:

      mkdir build
      cd build
      cmake ..
      make
      
    • 使用库

      在/lambook/ch1中新建cpp文件:

      // 这是一个库文件
      #include <iostream>
      using namespace std;
      
      void printHello(){
        cout << "Hello SLAM"<< endl;
      }
      

      在这里插入图片描述

      这个库中提供了一个printHello函数,调用此函数可以输出一条信息。在CMakeLists.txt里加上如下内容:

      add_library( hello libHelloSLAM.cpp )
      

      在这里插入图片描述

      这条命令告诉cmake,我们想把这个文件编译成一个叫做hello的库。然后,和上面一样,使用cmake编译整个工程:

      终端输入:

      cd build
      cmake ..
      make
      

      在这里插入图片描述

      这时在build文件夹中就会生成一个libhello.a文件,这就是我们得到的库。

      在这里插入图片描述

      在Linux中,库文件分为静态库共享库两种。静态库以.a为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。

      • 如果要生成共享库,只需将语句改为:
      add_library( hello_shared SHARED libHelloSLAM.cpp )
      

      在这里插入图片描述

      为了让别人知道库中的内容,我们需要提供一个头文件,说明这些库中的内容。

      #ifndef LIBHELLOSLAM_H_
      #define LIBHELLOSLAM_H_
      
      void printHello();
      
      #endif
      

      这样,根据这个文件和我们刚才编译得到的库文件,就可以使用printHello函数了。最后写一个可执行程序useHello.cpp来调用这个简单的函数:

      #include "libHelloSLAM.h"
      // 打印hello的函数
      int main(){
      	printHello();
      	return 0;
      }
      

      然后在CMakeLists.txt中添加一个可执行程序的生成命令,链接到刚才使用的库上:

      add_executable(useHello useHello.cpp)
      target_link_libraries(useHello hello_shared)
      

      在这里插入图片描述

      终端cmake:

      cd build
      cmake ..
      make
      

      后得到的结果:

      在这里插入图片描述

      在配置过程中碰到了这个问题:

      在这里插入图片描述

      后来发现是CMakeLists.txt拼写出了问题…

      最后调用:

      % ./useHello
      

      结果:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux的c++环境配置与cmake的使用 的相关文章

随机推荐

  • 解读事务的ACID!

    事务的ACID特性大学数据库课程基本都学过 xff0c 但是学完也就大概知道是干嘛的 xff0c 后来也没仔细想这个东西了 xff0c 后来接触了NoSQL系统的一致性 xff0c 于是重新学习 ACID xff0c 发现还有很多误区 今天
  • 欢迎加入 Apache IoTDB !

    官方网站 xff1a http iotdb apache org zh IoTDB 是清华自研时间序列数据库 xff0c 2014年项目启动 xff0c 2018年11月18号 IoTDB 正式进入 Apache 孵化器 xff0c 成为中
  • Xavier(2):Xavier NX刷机步骤及报错解决

    1 下载和安装NVIDIA SDK Manager 官方网站 xff1a https developer nvidia com embedded jetpac 选择sdk manager xff0c sdk manager版本没有要求 安装
  • 模型评估与优化1--基本概念与最优化问题

    模型评估与优化1 基本概念与最优化问题 首先先看一下基本术语和概念 1 数据集的划分 xff08 1 xff09 数据集 dataset xff1a 在机器学习任务中使用的一组数据 数据集中每一个数据称为一个样本 反映样本在某方面的表现或性
  • windows中vscode编译运行c++程序

    1 vscode 安装 c 43 43 扩展 在vscode中创建一个后缀为 01 cpp 的程序 xff0c 程序文件如下 xff0c vscode会自动提示安装 c 43 43 扩展 xff0c 点击进行安装 01 cpp includ
  • leetcode 刷题指南 & 刷题顺序

    1 刷题方法 amp 顺序 xff1a 按类型刷 xff0c 这样能总结出每种类型题目的规律 优先树 链表 二分查找 DFS BFS 动态规划数目 xff1a 常见类型刷10道 43 顺序 xff1a 先做2 4道简单题 xff0c 然后做
  • 北邮计算机学院2017届复试经验分享

    北邮计算机学院2017届复试经验分享 建议初试完了再来担心复试 xff0c 有看复试经验的时间还不如多做两道数学题 xff01 导师 xff1a 了解导师的情况 xff0c 最差也不要找一个人不好的老师 xff0c 其次尽量选自己喜欢的方向
  • STM32 Cube BMP180 获取温度、气压、海拔

    一 介绍 BMP180中内置有E2PROM xff0c 所以要获取数据 xff0c 就要使用I2C读写E2PROM来实现获取数据 xff01 BMP180的整个流程 xff1a 1 首先要初始化 xff0c 读取几个E2PROM地址上的值共
  • int 类型究竟多少字节?

    今天发现NEON技术中 int类型的字节数是2 xff0c 感觉很奇怪 xff0c 最早写51单片机时也是2 xff0c 后来到了观念转变成了4 xff0c 现在有遇到了2 一 转自 http www tuicool com article
  • python实现K均值聚类算法

    之前做大作业的时候本来想用聚类法给点集分类的 xff0c 但是太复杂了 xff0c 于是最后没有采用这个方案 现在把之前做的一些工作整理出来写个小博客 K means聚类法原理 xff1a 聚类是一个将数据集中在某些方面相似的数据成员进行分
  • 复合型自适应步长的Gauss型求积(附代码)

    复合型自适应步长的Gauss型求积 先前在做数值分析实验时 xff0c 把高斯型求积公式和复合型 自适应步长的求积融合到了一起 xff0c 但是后来发现题目没有这个要求 现在就把这个思路分享一下 上题目 xff1a 实验目的 xff1a 学
  • pid摄像头循迹(opencv和openmv)

    pid摄像头循迹 xff08 opencv和openmv xff09 用摄像头进行循迹的方法参考硬件选型方面软件思路一 图像预处理 xff1a 代码部分二 线性拟合opencv线性拟合 xff1a 实际在树莓派上运行时 xff0c 帧率也比
  • 通过云端自动生成openmv的神经网络模型,进行目标检测

    通过云端自动生成openmv的神经网络模型 xff0c 进行目标检测 OpenMV训练神经网络模型 xff08 目标识别 xff09 一 准备材料 xff1a 二 软件下载三 准备数据集 xff1a 四 数据集的上传与训练 OpenMV训练
  • opencv学习(9):cv::Scalar、cv::Mat::zeros

    1 cv Scalar cv Scalar是opencv的一个结构体 xff0c 其定义如下 xff1a xff08 c 43 43 中的结构体如下 xff0c 可以存放1 4个数值 xff09 various constructors S
  • 德国大陆ARS408系列毫米波雷达数据解析

    本人已完成对该型号系列毫米波雷达的解析工作 xff0c 有需求请私信联系
  • nmap使用详解

    nmap介绍 nmap xff08 Network Mapper xff09 是一款开源免费的针对大型网络的端口扫描工具 xff0c nmap可以检测目标主机是否在线 主机端口开放情况 检测主机运行的服务类型及版本信息 检测操作系统与设备类
  • OLED屏幕花屏的原因(I2C+DMA)

    OLED屏幕在通电后花屏 xff0c 呈雪花状 在网上查询原因 xff0c 开始了尝试 xff1a 1 可能是由于杜邦线的问题 xff0c 可能接触不良导致 xff0c 但更换了杜邦线依然花屏 2 可能是OLED屏幕问题 因为经常在工作 x
  • 竞赛保研(自动化专业)

    一 感谢 从大三的五月份一直到9 28号推免结束 xff0c 最终也是保研到了梦校 xff0c 还好我坚持到了最后一刻 感谢父母 xff0c 感谢远方的她 xff0c 感谢老师 xff0c 感谢实验室的平台 xff0c 也要感谢每一位一起拼
  • 随机森林的简单学习记录

    随机森林小记 这里采用的随机森林的库选择sklearn库 1 首先是导入数据 xff1a path span class token operator 61 span span class token string 34 D Epilept
  • Linux的c++环境配置与cmake的使用

    Ubuntu18 04安装 虚拟机安装 虚拟机软件版本 xff1a VMware Workstation 16 Pro 版本号 xff1a Ubuntu18 04 安装参考 xff1a http t csdn cn P71XR 虚拟机分辨率