vs下的输出目录/输出文件/工作目录-总结
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下的输出目录/输出文件/工作目录-总结相关推荐
- python生成word目录_Python 文件与目录操作方法总结
Python 有很多内置的模块和函数可用于文件的操作处理,这些函数都分布在几个模块上:如 os,os.path,shutil 和pathlib 等等.本文收集了许多您需要知道的函数,以便在 Pytho ...
- Linux 命令之 find -- 查找文件和目录/搜索文件和目录
文章目录 命令介绍 语法格式 常用选项 文件类型 参考示例 (一)在当前目录及其子目录下搜索内容中含有"140.206.111.111"的所有文件 (二)列出当前目录及其子目录下所 ...
- linux 文件的目录,Linux文件及目录管理
第七列:文件或目录名.名以 . 开头表示为隐藏文件或隐藏目录 2.2 修改文件目录或者权限 改变文件所属用户组:chgrp chgrp [-R] 用户组 文件或目录 ... [-R]:递归修改该目录下 ...
- linux下什么文件不能修改,Linux和Unix下root也不能修改文件与目录的命令
chattr 只有超级权限的用户才具有使用该命令的权限,这项指令可改变存放在ext2.ext3.ext4.xfs.ubifs.reiserfs.jfs等文件系统上的文件或目录属性. 1.功能说明 改变 ...
- 22 Python IO、打印到屏幕、读取键盘输入、打开和关闭文件、文件定位、重命名和删除文件、Python里的目录、文件,目录相关的方法
22Python文件I/O 22.1打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下: ...
- linux进入text目录,Linux文件和目录操作命令 | Soo Smart!
1. ls 命令 这个命令就相当于 dos 下的dir 命令一样,也是Linux 控制台命令中最为重要几个命令之一.ls 最常用的参数有三个:-a. -l .和–F. ls -a Linux 系统上的 ...
- python操作文件和目录_python文件和目录操作方法
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...
- linux node 文件存放目录_Linux文件与目录结构
在了解Linux系统目录结构之前应首先了解最为重要的一点: Linux系统中一切皆文件!!! 目录结构简介 命令与简介之间用":"分割,简介结束用"."表示. ...
- linux不允许将硬链接指向目录,linux 文件(目录)之软链接,硬链接 -
前提必须清楚一点,当指向数据的文件个数为0 时,数据块就会被释放掉,硬链接相当于硬盘上一块数据的多个指针,而软链接相当于指向数据指针的指针.个人理解成下面的图例 左边的是硬链接,右边的是软链接,无论对 ...
最新文章
- CSS:超出部分省略号
- 【Deep Learning】MLP识别手写 MNIST数字集
- 计算机组成原理所需芯片数,计算机组成原理-微电子学院微电子试验教学中心.PPT...
- 超人学院Hadoop大数据高薪就业分享
- js中的call及apply
- Mstar的Monitor方案笔记(五)——Gamma
- 红包雨架构设计---1、技术架构
- 写个单机版斗地主程序,复习c++面向对象
- Jmeter中文设置
- special effects - 星空宇宙背景特效
- Android拍摄raw照片,这20款摄影APP,让你的照片飞上天!
- vf省计算机考试题库,四川省33次计算机等级考试vf笔试题(含答案).
- 【Git/GitHub/VSCode】Git提交时使用EMOJI表情、在VS Code中使用emoji commit
- 【好消息】高录用、EI检索会议 | 2023年第二届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2023)
- 单元测试cpp:Stub
- 东北石油计算机类专业分数线,2018年东北石油大学各省录取分数线汇总
- 玩转STM32F0 Value Line Discovery 之 GPIO配置工具
- .NET CoreWebApi基于EasyNetQ使用RabbitMQ消息队列
- PyCharm使用pip命令或从settings处下载包失败的解决方案
- [网络流]学习笔记:一次理解网络流!