VS2008项目属性的部分解释

来源:互联网 发布:网络拔草是什么意思啊 编辑:程序博客网 时间:2024/06/06 02:33

  • 项目属性
    • 通用
    • 调试
    • CC
      • 常规
      • 优化
      • 预处理器
      • 代码生成
    • 备注

这里写图片描述
这里写图片描述

项目属性

通用

  1. 输出目录:把代码编译后输出到对应的目录,如.dll和.exe文件
  2. 中间目录:$(Configuration),工程目录下的 Debug和Release目录,就是ConfigurationName
    配置名字,通常是Debug或者Release完整生成之前调试等阶段的文件目录
  3. 清楚时要删除的拓展名: 右键项目名称 清理这一项的功能
  4. 生成日志文件:日志文件路径
  5. 配置类型:生成文件的类型,如.exe .dll
  6. MFC的使用:
    使用标准Windows库—顾名思义,
    在共享DLL中使用MFC—打包时一些MFC的DLL内容没有被包含在EXE文件中,所以EXE文件比较小,但是运行时要求系统中药有相关的DLL文件
    在静态库中使用MFC—将DLL中的代码写进EXE中, 运行exe时不需要相关DLL也能运行
  7. ATL的使用: 不太懂,有人说过时了??? 求评论解答
  8. 字符集: MBCS多字节字符系统,可以区分双字节和单字节,更省空间
    WCHAR Unicode字符 16 bits来表示一个字符
    PWSTR 指向Unicode字符串的指针
    PCWSTR 指向一个恒定的Unicode字符串的指针
    对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。
    ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。
  9. 基于公共语言运行时的语言编译器开发的代码称为托管代码,反之则被称为非托管代码。托管代码有很多优点,例如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等
  10. 全程序优化: debug版本不会优化,release版本会优化,优化有几种方式
    https://msdn.microsoft.com/zh-cn/library/0zza0de8.aspx
    这里写图片描述

调试

这里不太懂,msdn没找到
1. 命令 – $(targetpath) 指程序所在的路径

这里写图片描述

C/C++

常规

  1. 附加目录:程序中用到的其他目录里的东西,这边就要加上那个目录
  2. 解析#using引用:不太懂
  3. 调试信息格式:选择为程序创建的调试信息的类型,并选择是将此信息保存在对象
    (.obj) 文件还是程序数据库 (PDB) 中
    详情:https://msdn.microsoft.com/zh-cn/library/958x11bc.aspx
    备注:

    • None
      不产生任何调试信息,因此编译较快。
    • /Z7
      生成包含用于调试器的完整符号调试信息的 .obj 文件。符号调试信息包括变量的名称和类型以及函数和行号。不会生成任何 .pdb 文件。
      对于第三方库的发布者,不生成 .pdb 文件是一个优点。但是,在链接和调试期间,用于预编译头的 .obj 文件是必需的。如果 .pch 对象文件中只有类型信息(没有代码),则还必须使用 /Yl(为调试库插入 PCH 引用)进行编译。
    • /Zi
      产生包含用于调试器的类型信息和符号调试信息的程序数据库 (PDB)。符号调试信息包括变量的名称和类型以及函数和行号。
      类型信息放置在 .pdb 文件而不是 .obj 文件中。
      可以将 /Gm(启用最小重新生成)和 /Zi 结合使用,但使用 /Z7 编译时不能使用 /Gm。
      使用 /Zi 和 /clr 编译时,DebuggableAttribute 属性将不会被放入程序集元数据中;如果要使用该属性,则必须在源代码中指定它。该属性可影响应用程序的运行时性能。有关 Debuggable 属性如何影响性能以及如何减轻性能影响的更多信息,请参见令映像更易于调试。
    • /ZI
      以支持“编辑并继续”功能的格式产生如上所述的程序数据库。如果想使用“编辑并继续”调试,则必须使用此选项。因为大多数优化与“编辑并继续”不兼容,所以使用 /ZI 会禁用代码中的所有 #pragma optimize 语句。
      /ZI 会导致在编译中使用 /Gy(启用函数级链接)。
      /ZI 与 /clr(公共语言运行库编译)不兼容。
      注意:
      /ZI 只可用于面向 x86 的编译器中;此编译器选项不可用于面向 x64 或 Itanium 处理器系列 (IPF) 的编译器中。
      编译器将程序数据库命名为 project.pdb。如果编译没有项目的文件,则编译器将创建名为 VCx0.pdb. 的数据库,其中 x 是正在使用的 Visual C++ 的主版本。编译器将 PDB 的名称嵌入每个使用此选项创建的 .obj 文件中,从而使调试器了解符号和行号信息的位置。当使用此选项时,.obj 文件将较小,因为调试信息存储在 .pdb 文件中而不是 .obj 文件中。
      如果从使用此选项编译的对象创建库,则在将库链接到程序时,关联 .pdb 文件必须可用。因此,如果发布此库,就必须发布 PDB。
      若要不使用 .pdb 文件创建包含调试信息的库,必须选择编译器的 C 7.0 兼容 (/Z7) 选项。如果使用预编译头选项,则预编译头和其他源代码的调试信息都放在 PDB 中。指定了“程序数据库”选项时将忽略 /Yd 选项。
  4. 取消显示启动版权标志:在编译器启动时取消显示版权标志,并在编译期间取消显示信息性消息

  5. 警告等级:
    关 : 关闭所有警告(/W0) : 关闭所有警告消息的显示。
    1级(/W1) : 显示严重的警告消息。
    2级(/W2) : 显示等级,警告以及某些不太严重的警告,如关于隐藏类成员的警告。这是命令行中的默认警告等级
    3级(/W3) : 显示等级 2 警告以及某些不太严重的警告,如有关总是计算为真或假的表达式的警告。
    4级(/W4) : 显示所有等级 3 警告以及信息性警告。
    vs默认等级为/W3, 调试时不想出太多警告信息可以设为/W1,比如不想看见“使用未初始化的变量”警告信息刷屏, 发布时最好设为/W4.
  6. 检测64位可移植性问题: 顾名思义
  7. 将警告视为错误:顾名思义
  8. 使用UNICODE响应文件: 不懂求大佬解释
    这里写图片描述

优化

这里有msdn的详细解释
这里写图片描述

预处理器

msdn解释
这里写图片描述

代码生成

启动字符串池:https://msdn.microsoft.com/zh-cn/library/s0s0asdt.aspx
启用最小重新生成:https://msdn.microsoft.com/zh-cn/library/kfz8ad09.aspx
启动c++异常:https://msdn.microsoft.com/zh-cn/library/1deeycx5.aspx
较小类型检查:https://msdn.microsoft.com/zh-cn/library/8wtf2dfz.aspx
基本运行时检查:https://msdn.microsoft.com/zh-cn/library/8wtf2dfz.aspx
运行库:https://msdn.microsoft.com/zh-cn/library/2kzt1wy3.aspx
结构成员对齐:https://msdn.microsoft.com/zh-cn/library/xh3e3fd0.aspx
缓冲区安全检查:https://msdn.microsoft.com/zh-cn/library/8dbf701c.aspx
启用函数级链接:https://msdn.microsoft.com/zh-cn/library/xsa71f43.aspx
启用增强指令集:https://msdn.microsoft.com/zh-cn/library/7t5yh4fd.aspx
浮点模型:https://msdn.microsoft.com/zh-cn/library/e7s85ffb.aspx
启动浮点异常:可靠的浮点异常模型。 异常在触发后立即引发。 默认情况下关闭此选项。 将减号追加到此选项将显式禁用它

目前看到这里… 以后再补充

备注

msdn上的说明一些
https://msdn.microsoft.com/zh-cn/library/669zx6zc.aspx
注:
https://msdn.microsoft.com/zh-cn/library/c02as0cs.aspx
ConfigurationName:通常是Debug或者Release完整生成之前调试等阶段的文件目录
IntDir:编译器使用的中间目录
OutDir:链接器使用的输出目录
ProjectDir:项目目录
ProjectName:项目名字
SolutionDir:解决方案目录
TargetDir:目标输出文件所在的目录
TargetExt:目标输出的扩展名
TargetFileName:目标输出文件名,包括扩展名
TargetName:目标输出名,不包括扩展