VS2019 C++的跨平台开发——Cmake项目(二)

2023-05-16

这一篇主要补充Windows下WSL(Linux 子系统)创建,以及在WSL和远程Linux系统下编译和调试CMake项目。

Widnows下创建WSL

1. 右键左下角的Windows图标=》应用和功能=》启用或关闭Windows功能

2. 选中“适用于Linux的Windows子系统,确定

3. 安装结束后,应该需要重启一次。

4. 打开Windows应用商城,没有固定在这里可以在开始菜单搜索 Microsoft Store

5. 搜索Linux

6. 选中一个系统安装

第一个Ubuntu的app安装的是20.04 LTS版本。下面我将示范的系统版本也是20.04LTS。

直接点击安装就行了:

WSL的准备

装好后,会设置用户名和密码,用户名无所谓,密码是sudo需要的。

MS的官方介绍在这里:https://devblogs.microsoft.com/cppblog/c-with-visual-studio-2019-and-windows-subsystem-for-linux-wsl/

首先要安装VS远程编译调试需要的几个软件包,在WSL中运行命令行:

 sudo apt install g++ gdb make rsync zip

注意:一开始我也用的18.04的系统,结果安装g++的时候出现"xxx g++-5 unmet dependencies"失败。然后我又尝试了下20.04,直接丝滑安装就好了,所以就直接用20.04系统。这里安装的是g++,下面选配置的时候也要选择WSL-GCC-xxx。

18.04无法安装g++原来是我替换了中科大的apt源导致的,按照这篇文章换成阿里源就好了:https://blog.csdn.net/gs80140/article/details/89541655

WSL的一些知识:

1. WSL的root文件夹在系统的这个位置:

C:\Users\LY\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc这个根据你安装的Linux系统自己找下。

2. Windows的文件系统在WSL系统的/mnt/路径下,比如C盘的test文件夹在WSL的路径是"/mnt/c/test".

3. 避免在WSL系统运行的时候拷贝文件到WSL的文件夹下,或者修改某个文件。

4. 可以在Windows下用文件编辑器去直接修改WSL的Linux文件,但是需要注意可能会导致文件不能被Linux识别有效。主要是由于DOS文件系统和Unix文件系统的换行符不同,'\r\n'和'\n'. 如果某些脚本出现这种错误“syntax error near unexpected token `$'\r'”那就是文件系统不对应的问题。可以在WSL下安装dos2unix,使用dos2unix a.file来完成文件系统的转换。

VS中增加WSL的配置

项目还是上一篇文章中的项目,只是增加一个WSL的配置:

1.  进入管理配置:

2. 点击+号

3. 选择WSL-GCC-Debug

这个需要看你的WSL上安装的是G++还是Clang,参考WSL的准备

4. 选择刚刚安装的Ubuntu20.04

5. 选中WSL-GCC-Debug的配置

选中新配置后一般会出现上面两个红框的内容:第一个是由于远程生成需要对方Linux系统安装支持的Cmake版本;第二个是由于每个配置都有各自的CMake缓存,所以需要生成一次。

6. 先点击“是”安装CMake,安装好以后点击“生成+”生成CMake Cache。

首先选择“是”,点击以后会自动安装WSL的CMake。如下:

这个安装任务在后台,VS的左下角:

这里有个问题,就是我的电脑上VS给WSL安装CMake失败,感觉是CMake包一直没有传过去. 本来这篇文章打算五一前发出的,但是由于这个问题卡到了今天才完成后面的一点内容.

每次你点击"生成+"之后,控制台还是会输出"CMake 3.8.x 或更高版本不可用于远程系统.",在我这里是由于VS无法给WSL安装CMake所以无法生成CMake的Cache. 于是我决定手动安装CMake 3.7.2的版本,但结果控制台还是这样输出.:
1> 已为配置“WSL-GCC-Debug”启动 CMake 生成。
1> 在 /usr/bin/cmake 上找到 cmake 可执行文件。
1> 远程上标识的 CMake 版本“3.7.2.0”
CMake 3.8.x 或更高版本不可用于远程系统。将显示一个信息栏,提示可将 CMake 自动部署到远程系统。选择“是”开始部署,或选择“否”忽略该信息。有关详细信息,请参阅 https://aka.ms/linuxcmakeconfig。
已启动对远程计算机的 CMake 二进制部署。部署完成后,将自动继续 CMake 生成。

今天MS的员工终于给我解决这个问题了,上面是由于翻译错误导致的."CMake 3.8.x 或更高版本不可用于远程系统."这句话的意思实际是远程系统没有发现CMake 3.8.x或更高版本,就是需要安装高版本的CMake.而这个中文翻译看起来是不要安装高版本的CMake. 于是我手动安装了CMake 3.17.2的版本,就没问题了. 虽然VS的自动安装失败的问题还没解决,但是这个就交给MS的员工去解决了,我这里贴下手动安装CMake的方法:

1. 首先使用apt两个命令 apt-get update和apt-cache madison cmake查询下,cmake支持的版本有哪些:

2. 如果你的系统有高于3.8.x的版本,就直接安装:

sudo apt-get install cmake

3. 如果你的系统没有合适的cmake版本,可以自己下载安装:

先下载cmake安装脚本:wget https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2-Linux-x86_64.sh

版本链接在这里找https://cmake.org/download/

下载好了,运行安装脚本.这里要么sudo用绝对路径,要么先chmod 777后在直接运行.sh.:

sudo sh ~/cmake-3.17.2-Linux-x86_64.sh

一路空格,跳过license介绍,然后输入y接受license.最后再输入一个y确认安装路径.

最后,由于这个是解压缩包安装,就是绿色安装,所以还要在/usr/bin下面创建一个快捷方式能让VS找得到这个CMake:

sudo ln -s ~/cmake-3.17.2-Linux-x86_64/bin/cmake /usr/bin/cmake


2021-1-5

有读者反应, 这里还漏了一个问题. 即安装了cmake以后VS还是找不到.

如果你是apt安装那基本上没问题的. 但是如果你是通过.sh解压缩安装然后通过ln -s链接到/usr/bin/cmake的. 那需要在项目配置中做如下改动:

在高级设置中把CMake可执行文件的路径改为全路径. 

这个问题暂时不清楚原因, 前些时间也觉得改来改去很烦, 就给微软提了一个问题, 目前还没回复吧.


这样再回到VS,控制台输出这个就是正常运行了:

最后直接调试

生成的文件路径在这里:

注意这里和Linux系统不一样,不在Linux系统里是在Windows的VS项目下.

远程Linux系统的配置

至于远程的linux系统就快速带过,不懂的可以参考这一篇:VS2019 C++的跨平台开发——Linux开发.

首先和WSL一样只需要添加一个新的配置,Linux-GCC-Debug:

然后是配置远程计算机名称:

配置方法在之前的Linux的文章里有介绍.

配置完后切换配置,生成cmake cache:

也是直接调试就可以:

和WSL不同,远程的Linux系统是把代码拷贝到Linux系统,生成也是在远程的Linux系统.

生成路径在这里:

大概是:

/home/用户名/.vs/CMakeProject/01734532-db4d-47d9-a96b-577d471e9b96/out/build

 

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

VS2019 C++的跨平台开发——Cmake项目(二) 的相关文章

随机推荐

  • [OpenCV实战]15 基于深度学习的目标跟踪算法GOTURN

    目录 1 什么是对象跟踪和GOTURN 2 在OpenCV中使用GOTURN 3 GOTURN优缺点 4 参考 在这篇文章中 xff0c 我们将学习一种基于深度学习的目标跟踪算法GOTURN GOTURN在Caffe中搭建 xff0c 现在
  • **在Linux的shell脚本里激活conda 虚拟环境**

    在Linux的shell脚本里激活conda 虚拟环境 之前突发其想 xff0c 既然在命令行可以通过conda activate tf激活tf的虚拟环境 xff0c 那么能不能写个脚本实现呢 xff1f 费了好大劲 xff0c 发现并不行
  • Hierarchical Russian Roulette for Vertex Connections论文研读

    第二篇论文研读文章了 xff0c 虽然依旧很菜 xff0c 但这一篇开始就相对轻松一点了 文档种有些问题 xff0c 其中所有 实时 应该替换为 高效 Hierarchical Russian Roulette for Vertex Con
  • ARM通用中断控制器GIC之中断控制

    在阅读本章之前 xff0c 可以参考笔者之前关于GIC的一些描述 xff1a ARM通用中断控制器GIC generic Interrupt Controller 简介 ARM架构Generic Interrupt Controller G
  • 最小生成树之Kruskal算法

    给定一个无向图 xff0c 如果它任意两个顶点都联通并且是一棵树 xff0c 那么我们就称之为生成树 Spanning Tree 如果是带权值的无向图 xff0c 那么权值之和最小的生成树 xff0c 我们就称之为最小生成树 MST Min
  • xcode11解决:xcode multiple commands produce .../xxx/Assets.car

    最近在xcode 11上使用pod碰到一个问题 xff0c Assets car被生成多次 问题如下 xff1a Multiple commands produce 39 Users luowei Library Developer Xco
  • 算法 —— 冒泡排序

    冒泡排序 冒泡排序是比较两个相邻元素 xff0c 如果它们不符合预期的顺序就交换的一个排序过程 冒泡排序就像水中气泡上升到水面的运动一样 xff0c 数组的每个元素在每次迭代中都把当前迭中最大 或最小 的元素移动到最后 xff0c 因此被称
  • UICollectionView viewForSupplementaryElementOfKind 不调用

    发现UICollectionView 的 方法不调用 func collectionView collectionView UICollectionView viewForSupplementaryElementOfKind kind St
  • UICollectionViewCell 自动大小的两种常用方式

    方法一 xff1a 自动计算 override func viewDidLoad super viewDidLoad if let flowLayout 61 collectionView collectionViewLayout as U
  • UITableViewCell 图片自适应

    常见的一种方法是异步Completed时 xff0c 根据图片大小计算cell的高度并缓存到字典里后 xff0c 刷新tableView或indexPath 但这里介绍另一种更好的方式是使用约束处理 xff0c 对imageView的上下左
  • Swift编译死锁问题

    最近在Swift OC混编项目里遇到个奇怪的问题 xff0c 这样一行代码尽然引发了Swift编译过程死锁 xxSwiftModel salary 61 xxOCModel salary doubleValue 如果哪位大神知道根因 xff
  • 多线程及聊天室程序

    1 一个多线程程序 新建一个 win32 console application 取名 xff1a MultiThread 选空的工程 xff0c 并建立一个名为 MultiThread 的源文件编辑 xff1a include inclu
  • SQL Server 2008语句大全完整版

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 设置内存选项 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Swift从相册选择图片,图文混排并且可以保存、上传数据

    博主最近突发奇想想做一个自己的日记本App xff0c 在过程中遇到了一些坑 xff0c 摸索了很久才做出一个简单的日记本功能 先来看看一下效果吧 xff1a 先来说说这次用到的一些东西吧 xff1a 1 UIImagePickerCont
  • 2022年ABC模块样题十套分享

    2022年ABC模块样题十套分享 样题分享传送门
  • C# WinForm基础

    1 WinForm基础 Form1 cs using System using System Collections Generic using System ComponentModel using System Data using S
  • 做独立开发的一些感想

    好久没在CSDN上写东西 xff0c 这次写点感想吧 想想自己独立开发也有好多年了 xff0c 从刚毕业做的在线销售系统 xff0c 再到spring boot做写的my finances xff0c 再后来转iOS做的万能输入法 我的浏览
  • Vue3之script-setup全面解析

    可能很多同学 xff08 包括我 xff09 刚上手 Vue 3 0 之后 xff0c 都会觉得开发过程似乎变得更繁琐了 xff0c Vue 官方团队当然不会无视群众的呼声 xff0c 如果你基于脚手架和 vue 文件开发 xff0c 那么
  • windows下hadoop的部署和使用

    本教程在windows10环境下安装配置hadoop 43 hbase 43 spark 一 下载压缩包 xff1a 1 JavaJDK xff0c 1 8以上 2 Hadoop2 8 3 xff0c 下载地址 xff1a http arc
  • VS2019 C++的跨平台开发——Cmake项目(二)

    这一篇主要补充Windows下WSL xff08 Linux 子系统 xff09 创建 以及在WSL和远程Linux系统下编译和调试CMake项目 Widnows下创建WSL 1 右键左下角的Windows图标 61 应用和功能 61 启用