当前位置: 首页 > news >正文

VS C++ Project(项目)的工作目录设置

        如果只是简单创建一个VS C++Project或者MFC Project,可能很多时候,只关心将Project放在硬盘的那个位置,与Project目录相关的的其他问题,并不引人注意,我们也不是十分在意。有时我们不得不进行工作目录方面的设置,如Project中需要用到OpenCV图像处理库;生成的可执行文件需要在本地磁盘中创建文件,或者需要打开本地·磁盘中的文件等。下面来探讨VS C++ Project工作目录方面的话题。

        VS C++ Project的工作目录是Project属性的一部分,查看、修改、设置等都在目录项中进行。下面以用VS 2022 创建的DequeTest Project (对话框程序)为例,演示目录属性的查看与设置。

        点击“项目”菜单,然后点击“DequeTest和属性"子菜单:

        弹出DequeTest属性页,如下:

在上面的属性页的配置属性项下的常规项中可以看到:输出目录、中间目录两项与目录相关的内容。点击输出目录项后面的向下符号,即可想象展开,看到”编辑“与”浏览“两个选项:

点击”编辑“项,即可看到输出目录,如下:

输出目录中$(SolutionDir)$(Platform)\$(Configuration)\表示编译生成的文件(输出文件)放在Project所在目录下的平台名目录下的配置目录下,本程序是在win10下用VS2022创建,因此平台名是X64,目前Project配置如下:

配置目录名是:Debug

生成的文件路径如下:

修改输出目录如下:

重新生成解决方案:

可以看到在D目录下生成了输出文件:

点击”浏览“选项,则是浏览选择输出目录,缺省是Project所在目录,如下:

同样中间目录也可修改,也有”编辑“与浏览两个选项,如下:

在配置属性的高级选项中有一项有提到输出目录,如下:

”将C++运行时复制到输出目录“,是什么意思?先不管它,其缺省值是否,将其改为是,如下:

重新生成,看下结果如何。可以看到D目录下多了很多dll文件,如下:

        实际上是将VC++ runtime的1相关文件复制到了输出目录中。一般情况下,不需要将此项选为:”是“,如果的确需要VC运行库,可以在程序文件打包时打包VC运行库,在程序安装时,让其安装VC运行库。

点击配置属性相下的”调试“项,可以看到工作目录一栏,如下:

将其展开,同样也有”编辑“与”浏览“两个选项,可用这两个选项对其进行修改。

点击编辑,在弹出的工作目录对话框中可以看到当前工作目录:

也可在这个对话框中对工作目录进行修改。这里不对其修改。

        展开”VC++目录“项,可以看到很多与目录有关得到项目:

这些目录项,都是可以编辑或者配置的。其编辑或配置需依实际需求进行。一般情况下不要随意修改,否则可能否导致出错。例如本示例项目需要用到OpenCV,就需要配置”包含目录“与库目录。包含目录配置是指出包含内容所在目录,DequeTest Project的配置如下:

DequeTest Project的库目录配置是指出OpenCv库所在目录,其配置如下:

上面探讨了与Project工作目录及相关目录的配置。如果程序要打开工作目录中的文件,需要如何配置路径呢?例如,如果要为本示例的对话框中的打开,按钮添加代码要打开工作目录中的图像文件要如何设置文件路径呢?

现在来为”打开“按钮来添加事件处理程序,在添加代码前先将一个图像文件Copy到Project目录下,因为该目录即为Project的工作目录。如下:

添加”打开”按钮事件处理程序的代码如下:

void CDequeTestDlg::OnBnClickedOpen()
{Mat src = imread("1.tif");if (src.empty())MessageBox(L"无法打开图像!");else{MatToCImage(src, mImage);DispalyImage(mImage);}
}

由于图像文件已经放在其工作目录中,所以不需要要特别指出文件所在目录。上面代码中用到了两个函数:MatToCImage与DisplayImage,这里两个函数事先已写好,因与本文主题无关,这里不特别做说明。试运行,结果如下:

点击“打开”按钮,结果如下:

已正常打开图像。因.\\也是表示当前目录(相对路径表示法),上面的代码修改如下, 也应该可以正常打开图像。

void CDequeTestDlg::OnBnClickedOpen()
{//Mat src = imread("1.tif");Mat src = imread(".\\1.tif");if (src.empty())MessageBox(L"无法打开图像!");else{MatToCImage(src, mImage);DispalyImage(mImage);}
}

试运行,再点击打开,结果如下:

确实能够正常打开。

        如果程序编译成了可执行的exe文件,exe程序文件的工作目录又是哪个目录?当然是可执行的exe文件所在目录。将可执行的exe文件与图像文件放在同一目,如下:

以管理员身份运行程序,点击打开,结果如下:

可以正常打开。如果将“打开”的源代码改为如下:

void CDequeTestDlg::OnBnClickedOpen()
{//Mat src = imread("1.tif");//Mat src = imread(".\\1.tif");Mat src = imread("..\\1.tif");if (src.empty())MessageBox(L"无法打开图像!");else{MatToCImage(src, mImage);DispalyImage(mImage);}
}

则图像文件则需要放在生成的可执行exe文件的上级文件夹中,否则无法打开。将上面Release文件夹中的可执行文件用新生成的文件替代。试运行,点击打开,结果如下:

将图片移动到上级文件夹中。如下:

试运行,点击打开,结果如下:

有关VS C++的工作目录设置就探讨到这里,需要说明的是:如果没有修改Project的工作目录,Project的工作目录就是Project的的所在目录,生成的可执行的exe文件的工作目录是其所在目录,即将生成的可执行的exe文件Copy到哪个目录下,这个目录就变成了生成的可执行的exe程序文件的工作目录,如果该程序文件选打开文件,文件的相对位置必须正确。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 文件目录的获取
  • Linux下的DevOps
  • 【边缘计算与IoT】边缘计算的概念和在IoT中的应用
  • Python环境:深入理解与构建实践
  • Yarn的安装与配置(秒懂Yarn用法)
  • 低代码如何加速数字化转型
  • 如何安装和使用 Redis
  • App测试分发的秘密:如何让你的应用程序快速上线
  • 本地部署大模型
  • 49、PHP 实现堆排序
  • vue3 + element plus使用iconfont 自定义font组件颜色大小可修改
  • 2024 CISCN总决赛 ShareCard
  • CPU、GPU等处理器介绍
  • 深入探索非线性数据结构:树与图的世界
  • 基于opencv的人脸识别(实战)
  • 收藏网友的 源程序下载网
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Date型的使用
  • DOM的那些事
  • ECMAScript6(0):ES6简明参考手册
  • ES6系统学习----从Apollo Client看解构赋值
  • ES6语法详解(一)
  • iOS | NSProxy
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • java多线程
  • Python socket服务器端、客户端传送信息
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SQLServer之创建显式事务
  • 闭包--闭包之tab栏切换(四)
  • 从伪并行的 Python 多线程说起
  • 订阅Forge Viewer所有的事件
  • 规范化安全开发 KOA 手脚架
  • 浅谈Golang中select的用法
  • 区块链分支循环
  • 实现菜单下拉伸展折叠效果demo
  • 消息队列系列二(IOT中消息队列的应用)
  • 小而合理的前端理论:rscss和rsjs
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #Java第九次作业--输入输出流和文件操作
  • $nextTick的使用场景介绍
  • (20050108)又读《平凡的世界》
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (MATLAB)第五章-矩阵运算
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (含笔试题)深度解析数据在内存中的存储
  • (六)软件测试分工
  • (五)MySQL的备份及恢复
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)SvelteKit教程:hello world
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)Linux网络编程入门
  • ****三次握手和四次挥手