VS2019 C++的跨平台开发——Cmake项目(二)
这一篇主要补充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需要的。
首先要安装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
转自:https://blog.csdn.net/luoyu510183/article/details/105847329