VS2022跨平台Linux CMake项目搭建过程
1. 环境准备
开发机器:
- VS2022(VS2019 16以上都支持)
下载地址:https://visualstudio.microsoft.com/zh-hans/vs/
应注意Linux开发负载要存在,根据下图检查
Linux设备:
请确保安装了以下项:
- gcc
- gdb
- rsync
- zip
- ninja-build(Visual Studio 2019 或更高版本)
安装命令 sudo apt-get install g++ gdb make ninja-build rsync zip
若没有ninja,会在debug的时候报错
因为新版VS生成的cmake项目默认生成器是ninja
2. 配置Cmake项目
新建一个cmake项目,进入后会生成以下默认工程目录结构及文件
每个项目都会有个CMakeLists.txt,最外层为全局的顶层CMakeLists.txt(作用参考)
最外层还会有一个CMakePresets.json,新版VS生成这个.json文件,某些稍旧版本为CMakepreSettings.json,作用类似于.vcproj,里面有在VS 和VS Code中识别的工程配置文件。
其所有属性参考
打开CMakePresets.json可以看到配置
其与启动管理器对应,上图为在本地计算机上编译运行的配置
如果在jetson nano等Linux设备上配置编译,请添加外部SSH链接
点击切换
添加成功
按照自己的Linux架构添加
"architecture": { "strategy": "external", "value": "aarch64" },
查看自己的架构可以在Linux端用 uname -a 查看
rita@xxx:~$ uname -a Linux xxx 4.9.253-tegra #1 SMP PREEMPT Mon Jul 26 12:13:06 PDT 2021 aarch64 aarch64 aarch64 GNU/Linux
给工程配置CMakeLists.txt,添加OpenCV的依赖
find_package(OpenCV REQUIRED) target_link_libraries(BiobaseStereoDepth LINK_PRIVATE ${OpenCV_LIBS})
ctrl+s保存,上方出现从CMake收集信息后将刷新xxx,一定要等这个结束,下面的输出也会提示现在的生成过程,ctrl+s后才会自动加载缓冲生成
生成成功后在你的启动项中,就可以看到你成功生成的项目了,点击选择成启动项目
写入自己的OpenCV代码,然后点击绿色三角的启动,就会自动编译并运行工程了,默认生成到了你的Linux平台上的~/.vs
下
// xxx.cpp: 定义应用程序的入口点。 // #include "xxx.h" //这里应有opencv必要的头文件 #include <vector> using namespace std; using namespace cv; void creatAlphaMat(Mat& mat) // 创建一个图像 { for (int i = 0; i < mat.rows; i++) { for (int j = 0; j < mat.cols; j++) { Vec4b& rgba = mat.at<Vec4b>(i, j); rgba[0] = UCHAR_MAX; rgba[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); rgba[2] = saturate_cast<uchar>((float(mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2])); } } } int main() { //创建带Alpha通道的 Mat Mat mat(480, 640, CV_8UC4); creatAlphaMat(mat); vector<int>compression_params; compression_params.push_back(IMWRITE_PNG_COMPRESSION); compression_params.push_back(9); try { imwrite("透明值图.png", mat, compression_params); imshow("生成的PNG图", mat); fprintf(stdout, "PNG图片文件的数据保存完毕"); waitKey(0); } catch (runtime_error& ex) { fprintf(stderr, "图像转换发生错误:%s\n", ex.what()); return 1; } return 0; }
再有编程任务可以此类推,如果是CMake和OpenCV基础、Linux基础等不熟悉,可以在互联网上寻求帮助,本篇博客对过程外的知识运用不做解释,请谅解!