参考文章:使用vs进行Linux远程开发
vs进行远程开发分为三步:
1、创建远程环境的连接,随后让vs将远程环境中的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代码补全只需要头文件即可。
2、当代码写好后,选择合适的远程环境,vs将目标文件和代码复制到远程环境的指定位置,接着根据你的配置进行编译。
3、随后vs将会在console的gdb或gdbserver中运行你的程序,在此期间你可以充分享受vs debugger带来的高效和便利。
经过上述步骤之后你就可以在vs里调试自己编写的跨平台程序了。
文章目录
1、在VS安装 c++ for Linux2、准备一个可用的Linux远程环境3、配置远程普通项目4、配置远程cmake项目一般步骤VS Cmake远程开发opencv项目示例vs_opencv_cmake_remote_test.cppCMakeLists.txtCMakeSettings.jsonvs_opencv_cmake_remote_test.h在vs编译结果在ubuntu上运行结果1、在VS安装 c++ for Linux
(我修改的时候把嵌入式lot啥的也勾上了,不知道那个干什么用的)
2、准备一个可用的Linux远程环境
例如配置了静态IP的Linux虚拟机,并且已经安装好了GCC工具链以及openssh(openssh-server、g++、gdb 和 gdbserver
)。(不用多说,这个GCC[G++]工具链用apt install安装就好了,openssh也一样)
sudo apt-get install openssh-server g++ gdb gdbserver
3、配置远程普通项目
创建项目选这个:
详细步骤:
见此:VS(官方)跨平台开发远程调试教程
4、配置远程cmake项目
注意:适用于VS,且远程目标平台的cmake版本大于等于3.8
安装高版本cmake见此:linux 下如何升级CMAKE?(安装指定版本cmake)(高版本cmake)(不删除之前的,可以用软连接)
远程生成遇到的问题及解决办法及成功案例见此:
VS cmake远程调试ubuntu项目生成报错:“Does not match the generator used previously: Ninja“
其他的按照下面几篇文章指导的步骤操作,基本没啥问题了
一般步骤
先新建项目,选择cmake的;
完后点击这里管理配置,点击左边新建:
选择linux-GCC-Debug:
取个别名:
选择要远程的计算机:
修改远程生成根目录:
/arnold_test/0222_vs_remote_test/Arnold_Opencv_Linux-GCC-Debug
点击最下面高级选项,这俩不知道改不改(貌似不用改,我看了一下,里面只有这些文件而已):
然后ctrl+s保存配置文件,然后切换到.cpp文件,在上面选择运行项:
然后ctrl+f5运行(当然直接打断点调试也是可行的):
VS Cmake远程开发opencv项目
opencv项目貌似还跟上面不太一样,具体配置可参考:
VS cmake远程调试ubuntu项目生成报错:“Does not match the generator used previously: Ninja“(删除.vs隐藏文件夹)VS cmake 远程开发 opencv报错:CMake was unable to find a build program corresponding to “Ninja“.(换个构建方式)
主要就是貌似需要把CMake生成器改成Unix Makefiles,还有IntelliSense模式改成linux-gcc-x64
然后还可能会遇到代码紫色波浪线报错,解决参考:
vs cmake opencv 远程 ubuntu 开发时:vs代码出现紫色波浪线且报错怎么办?
开发opencv项目,是直接在上面的基础上,修改CMakeLists.txt
不过前提是在目标机器上已经能编译运行起来opencv项目哈。。。可参考:Linux ubuntu16.04 安装opencv4教程(源码编译)
示例
vs_opencv_cmake_remote_test.cpp
#include <stdio.h>#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char** argv){if (argc != 2){printf("usage: DisplayImage.out <Image_Path>\n");return -1;}Mat image;image = imread(argv[1], 1);//1是以rgb读取if (!image.data){printf("No image data \n");return -1;}namedWindow("Display Image", WINDOW_AUTOSIZE);imshow("Display Image", image);waitKey(0);return 0;}
CMakeLists.txt
# CMakeList.txt: vs_opencv_cmake_remote_test 的 CMake 项目,在此处包括源代码并定义# 项目特定的逻辑。#cmake_minimum_required (VERSION 3.8)project ("vs_opencv_cmake_remote_test")find_package(OpenCV REQUIRED )#find_package(OPENCV REQUIRED)# 将源代码添加到此项目的可执行文件。add_executable (vs_opencv_cmake_remote_test "vs_opencv_cmake_remote_test.cpp" "vs_opencv_cmake_remote_test.h")# TODO: 如有需要,请添加测试并安装目标。target_link_libraries(vs_opencv_cmake_remote_test ${OpenCV_LIBS})#cmake_minimum_required(VERSION 2.8)#project( test )#find_package( OpenCV REQUIRED )#add_executable( test test.cpp )#target_link_libraries( test ${OpenCV_LIBS} )
CMakeSettings.json
{"configurations": [{"name": "x64-Debug","generator": "Ninja","configurationType": "Debug","inheritEnvironments": [ "msvc_x64_x64" ],"buildRoot": "${projectDir}\\out\\build\\${name}","installRoot": "${projectDir}\\out\\install\\${name}","cmakeCommandArgs": "","buildCommandArgs": "","ctestCommandArgs": ""},{"name": "Arnold_Opencv_Linux-GCC-Debug","generator": "Unix Makefiles","configurationType": "Debug","cmakeExecutable": "cmake","remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],"cmakeCommandArgs": "","buildCommandArgs": "","ctestCommandArgs": "","inheritEnvironments": [ "linux_x64" ],"remoteMachineName": "-596051304;192.168.1.44 (username=arnold, port=22, authentication=Password)","remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src","remoteBuildRoot": "/home/arnold/Arnold_test/0222_Arnold_Opencv_Linux-GCC-Debug","remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}","remoteCopySources": true,"rsyncCommandArgs": "-t --delete --delete-excluded","remoteCopyBuildOutput": false,"remoteCopySourcesMethod": "rsync","addressSanitizerEnabled": false,"intelliSenseMode": "linux-gcc-x64","remoteCopyUseCompilerDefaults": true}]}
vs_opencv_cmake_remote_test.h
// vs_opencv_cmake_remote_test.h: 标准系统包含文件的包含文件// 或项目特定的包含文件。#pragma once#include <iostream>// TODO: 在此处引用程序需要的其他标头。
在vs编译结果
开始将文件复制到远程计算机。已完成复制文件(运行时间 00h:00m:00s:259ms)。cd /home/arnold/Arnold_test/0222_Arnold_Opencv_Linux-GCC-Debug;/usr/bin/cmake --build /home/arnold/Arnold_test/0222_Arnold_Opencv_Linux-GCC-Debug --clean-first --config Debug;[ 50%] Building CXX object CMakeFiles/vs_opencv_cmake_remote_test.dir/vs_opencv_cmake_remote_test.cpp.o[100%] Linking CXX executable vs_opencv_cmake_remote_test[100%] Built target vs_opencv_cmake_remote_test全部重新生成 已成功。
在ubuntu上运行结果
./vs_opencv_cmake_remote_test test.jpg
参考文章1:vs+cmake实现Linux远程开发 ★★★★★
参考文章2:VS C++的跨平台开发——Cmake项目(二)★★★★★
参考文章3:VS远程调试已有cmake项目
VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS 且远程目标平台cmake版本大于等于3.8)
如果觉得《VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS 》对你有帮助,请点赞、收藏,并留下你的观点哦!