当前位置: 首页 > 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程序文件的工作目录,如果该程序文件选打开文件,文件的相对位置必须正确。

http://www.lryc.cn/news/409253.html

相关文章:

  • STM32自定义协议串口接收解析指令程序
  • STM32——GPIO(点亮LEDLED闪烁)
  • VulnHub靶机入门篇--kioptrix.level 3
  • aiGPT系统源码★重大升级★AI写作/AI绘画/AI音乐/AI视频
  • Vue Router高级用法:动态路由与导航守卫
  • 江科大/江协科技 STM32学习笔记P9-11
  • 【培训通知】成为Power BI数据分析可视化实战第一人,加入3天直播即可
  • 24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合
  • 一篇文章告诉你对讲机为什么不能被手机取代的7个原因
  • LION论文阅读
  • 在Android上实现汉字笔顺动画效果——HanZiWriter
  • 黑马头条vue2.0项目实战(一)——项目初始化
  • Unity Shader动画:用代码绘制动态视觉效果
  • 智税集成2.0生成凭证
  • B4005 [GESP202406 四级] 黑白方块 【暴力枚举】【前缀和】
  • 深度学习趋同性的量化探索:以多模态学习与联合嵌入为例
  • 决策树与随机森林:比较与应用场景分析
  • C#用Aspose.Cells导出Excel,.NET导出Excel
  • 天猫番茄品类TOP1,复购率超40%,「一颗大」如何策划极致产品力?
  • Docker搭建私有仓库harbor(docker 镜像仓库搭建)
  • 面试题:MySQL 索引
  • 云计算day13
  • 2024年孝感中级职称报名开始了吗?
  • RAG技术之Router
  • linux系统通过修改sudo文件使普通用户拥有类似root用户权限
  • 基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
  • TypeScript学习篇-类型介绍使用、ts相关面试题
  • 超详细!Jmeter性能测试
  • C语言经典习题24
  • SQL labs-SQL注入(三,sqlmap使用)