vs下的输出目录/输出文件/工作目录-总结

一、vs解决方案下各文件夹的包含关系

一般来说,vs中的c++项目的解决方案总文件夹下包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个文件夹,其中Debug和Release文件夹中存放最终生成的结果exe或dll,如果不使用Release生成,则不存在Release文件夹)。

而解决方案和项目文件夹包含关系下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(注意,此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西。如果不使用Release编译,则没有对应的Release文件夹)。

Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息

Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件

二、输出目录/输出文件/工作目录

1、输出目录-决定$(OutDir)

即设置了VS的“输出目录”属性就相当于设置了$(OutDir)的值。

如果我们建立一个默认的vc项目ssyy,他的默认“常规“栏目中,“输出目录”为$(SolutionDir)$(ConfigurationName),所以调试时会在解决方案文件夹下建立一个debug(ConfigurationName的值为debug)文件夹,并在此文件夹下生成 ssyy.lik链接器 和ssyy.exe文件(默认情况下) 。

默认“中间目录”为$(ConfigurationName),所以会在ssyy项目文件夹下(即ssyy.vcproj的项目配置文件所在位置)建立一个debug文件夹,并在该文件夹下生成ssyy.obj二进制文件。

默认“链接器”栏目下的“常规”选项下的“输出文件”选项为​$(OutDir)$(ProjectName).exe,其中$(OutDir)就已经在“常规”栏目的“输出目录”选项赋值了。

注意:实际上输出目录不决定输出exe文件的位置。

2、输出文件-决定$(TargetDir)

$(TargetDir)的值是在生成exe文件后自动赋予值为exe文件所在位置。所以可以说,“输出文件”最终决定exe文件所在的位置

默认情况下“输出目录”和“输出文件”两个属性对应的目录是一样的,这样用着方便(当然,输出文件的值在输出目录的值的基础上还包含有exe文件名)。如果两个不一样,则中间生成的链接器用的如xx.ilk和xx.pdb文件等在输出目录,而最终生成的xx.exe文件在“输出文件”属性设置的目录中。

当调试程序时,系统变量$(OutDir)的值是最先确定的,而$(TargetDir)和$(TargetPath)的值是在exe文件生成后才确定的。也就是说系统变量$(OutDir)的值由VS项目的“输出目录”属性决定,而$(TargetDir)和$(TargetPath)的值由VS项目的“输出文件”属性决定。

3、工作目录

“调试”栏目中的“工作目录”项,这个属性默认情况下是空的,但表示工作目录是工程目录,也就是工程配置文件ssyy.vcproj所在目录。

“工作目录”属性作用是程序运行后唯一识别的默认目录,即工作后只认识这个目录。

例如程序运行过程中生成一个txt文本文件,如果在创建文件过程中未指定绝对路径,只指定创建文件的文件名,那么这个文本文件默认就会建立在工作目录中,当然读取一些配置文件也在工作目录中查找,但要说明一下,生成的exe文件跟工作目录没任何关系,也不会放在工作目录中。总的来说,工作目录就是程序运行过程中默认读取的目录。

对工作目录的补充

vs中工作目录的设置是给调试用的,也即你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。

但是如果不使用vs的调试启动exe,而是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。所以如果发布的时候不把工作目录内的东西拷到exe所在的目录内,就会运行出错,因为此时工作目录不再是vs中设置的了,而是exe文件所在的目录。

上面所说的“调试”是指vs下启动exe,包括debug模式和release模式,不要把调试就理解为只有debug模式。】

如果工程中用到的文件不在默认的工作目录下,而程序中又直接使用了相对路径,则应修改工作目录。

参考文档

vs下的输出目录/输出文件/工作目录-总结相关推荐

  1. python生成word目录_Python 文件与目录操作方法总结

    Python 有很多内置的模块和函数可用于文件的操作处理,这些函数都分布在几个模块上:如 os,os.path,shutil 和pathlib 等等.本文收集了许多您需要知道的函数,以便在 Pytho ...

  2. Linux 命令之 find -- 查找文件和目录/搜索文件和目录

    文章目录 命令介绍 语法格式 常用选项 文件类型 参考示例 (一)在当前目录及其子目录下搜索内容中含有"140.206.111.111"的所有文件 (二)列出当前目录及其子目录下所 ...

  3. linux 文件的目录,Linux文件及目录管理

    第七列:文件或目录名.名以 . 开头表示为隐藏文件或隐藏目录 2.2 修改文件目录或者权限 改变文件所属用户组:chgrp chgrp [-R] 用户组 文件或目录 ... [-R]:递归修改该目录下 ...

  4. linux下什么文件不能修改,Linux和Unix下root也不能修改文件与目录的命令

    chattr 只有超级权限的用户才具有使用该命令的权限,这项指令可改变存放在ext2.ext3.ext4.xfs.ubifs.reiserfs.jfs等文件系统上的文件或目录属性. 1.功能说明 改变 ...

  5. 22 Python IO、打印到屏幕、读取键盘输入、打开和关闭文件、文件定位、重命名和删除文件、Python里的目录、文件,目录相关的方法

    22Python文件I/O 22.1打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下: ...

  6. linux进入text目录,Linux文件和目录操作命令 | Soo Smart!

    1. ls 命令 这个命令就相当于 dos 下的dir 命令一样,也是Linux 控制台命令中最为重要几个命令之一.ls 最常用的参数有三个:-a. -l .和–F. ls -a Linux 系统上的 ...

  7. python操作文件和目录_python文件和目录操作方法

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  8. linux node 文件存放目录_Linux文件与目录结构

    在了解Linux系统目录结构之前应首先了解最为重要的一点: Linux系统中一切皆文件!!! 目录结构简介 命令与简介之间用":"分割,简介结束用"."表示. ...

  9. linux不允许将硬链接指向目录,linux 文件(目录)之软链接,硬链接 -

    前提必须清楚一点,当指向数据的文件个数为0 时,数据块就会被释放掉,硬链接相当于硬盘上一块数据的多个指针,而软链接相当于指向数据指针的指针.个人理解成下面的图例 左边的是硬链接,右边的是软链接,无论对 ...

最新文章

  1. CSS:超出部分省略号
  2. 【Deep Learning】MLP识别手写 MNIST数字集
  3. 计算机组成原理所需芯片数,计算机组成原理-微电子学院微电子试验教学中心.PPT...
  4. 超人学院Hadoop大数据高薪就业分享
  5. js中的call及apply
  6. Mstar的Monitor方案笔记(五)——Gamma
  7. 红包雨架构设计---1、技术架构
  8. 写个单机版斗地主程序,复习c++面向对象
  9. Jmeter中文设置
  10. special effects - 星空宇宙背景特效
  11. Android拍摄raw照片,这20款摄影APP,让你的照片飞上天!
  12. vf省计算机考试题库,四川省33次计算机等级考试vf笔试题(含答案).
  13. 【Git/GitHub/VSCode】Git提交时使用EMOJI表情、在VS Code中使用emoji commit
  14. 【好消息】高录用、EI检索会议 | 2023年第二届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2023)
  15. 单元测试cpp:Stub
  16. 东北石油计算机类专业分数线,2018年东北石油大学各省录取分数线汇总
  17. 玩转STM32F0 Value Line Discovery 之 GPIO配置工具
  18. .NET CoreWebApi基于EasyNetQ使用RabbitMQ消息队列
  19. PyCharm使用pip命令或从settings处下载包失败的解决方案
  20. [网络流]学习笔记:一次理解网络流!

热门文章

  1. SSC 扩频时钟技术(0)
  2. 假面骑士模拟器java版_我的世界JAVA版20w20a最新版
  3. java之选择结构与分⽀结构
  4. 一个Java练习的潜艇小游戏
  5. Vscode配置python环境
  6. 第六十三章 SQL函数 IFNULL
  7. SketchUp浴室改装教程 | Lynda教程 中文字幕
  8. @getMapping与@postMapping注解
  9. 教你如何破解xp开机密码
  10. php 用积分兑换_PHP_PHP积分兑换接口实例,本文实例讲述了PHP积分兑换接 - phpStudy...