VS - 项目属性配置窗口详解

简介

Visual C++ 项目系统基于 MSBuild。

虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE,在你修改参与继承的属性时,这一点尤为重要。

Visual C++ 项目系统不一定可以识别在 MSBuild 中有效的手动编辑文件,在生成过程中可能产生细微错误。

 

项目文件.vcxproj

项目文件是文件扩展名为 .vcxproj 的 XML 文件。所有在 IDE 中设置的属性直接写入项目文件或生成时导入的属性表中

 

VC++ 目录

是配置属性,对应不同配置,其值可以不同,例如 Debug 对应 Release。

你可以使用对话框顶部的“配置”和“平台”列表框设置适用于属性的配置;

在许多情况下,“所有平台”和“所有配置”就是合适的选择。

“通用属性”规则中的设置适用于所有配置。

当修改后,选择“确定”按钮后,新值就会写入项目文件。

参考:https://msdn.microsoft.com/zh-cn/library/669zx6zc(v=vs.120).aspx

注意:“属性页”对话框仅显示适用于当前项目的属性页。 例如,如果该项目没有 .idl 文件则不会显示 MIDL 属性页。

 

“属性页”对话框中属性的详细信息

“常规”选项页(项目)

常规
  “常规”区域中的属性影响生成过程中创建的文件位置和当选择“清除”选项(“生成”菜单)时删除的文件。

1、输出目录:

  指定链接器等工具用来放置生成过程中创建的所有最终输出文件的目录。

  这通常包括链接器、管理员或 BSCMake 这类工具的输出。

  对应属性$(OutDir) , 即 OutputDirectory。

2、中间目录  

  指定编译器等工具用来放置生成过程中创建的所有中间文件的目录。   

  这通常包括 C/C++ 编译器、MIDL 和资源编译器这类工具的输出。   

  对应属性$(IntDir) ,即: IntermediateDirectory。

3、Target Name  

  此项目生成的文件名

4、目标扩展名

  此项目生成的文件扩展名;例如,.exe 或 .dll

5、清除时要删除的扩展名  

  “清除”选项(“生成”菜单)从生成项目配置的中间目录中删除文件。   

  当运行“清除”或执行重新生成时,具有用此属性指定的扩展名的文件将被删除。   

  除了中间目录中具有这些扩展名的文件外,生成系统还删除生成的所有已知输出(包括 .obj 文件这样的中间输出),与它的位置无关。  

  注意可以指定通配符。

  

 6、生成日志文件  

  每次生成项目时创建的日志文件指定非默认位置 

  默认: $(IntDir)$(MSBuildProjectName).log, 即“中间目录”/ 项目名称.log 文件。

7、平台工具集

  允许项目以 Visual C++ 库和编译器的不同版本为目标。   

  Visual C++ 项目既可以以 Visual Studio 2012 (v100) 中的默认工具集为目标,也可以以创建运行在Windows XP上的可执行程序的工具集为目标。

项目默认值

  “项目默认值”区域表示可以修改的默认属性。

  这些属性的定义可以在 Installation Directory\VC\VCProjectDefaults 中的 .props 文件中找到。

1、配置类型
  “应用程序 (.exe)”,显示链接器工具集,该工具集中包括:

    C/C++ 编译器、MIDL、资源编译器、链接器、BSCMake、XML Web services 代理生成器、自定义生成、预生成、预链接、生成后事件等

  “动态库 (.dll)”,显示链接器工具集,指定 /DLL 链接器选项并将 _WINDLL 定义添加到 CL。

  “Makefile”(生成文件),显示生成文件工具集 (NMake)。 

  静态库 (.lib),显示管理员工具集(除了用管理员代替链接器和省略 XML Web services 代理生成器外,与链接器工具集相同)。

  “Utility”实用工具,显示实用工具工具集(MIDL、自定义生成、预生成、生成后事件)。

2、MFC 的使用
  指定 MFC 项目是否将静态或动态链接到 MFC DLL。

  非 MFC 项目可以选择“使用标准 Windows 库”链接到使用 MFC 时包括的各种 Win32 库。

3、字符集

  定义是否应该设置 _UNICODE 或 _MBCS。 在适当的地方还影响链接器入口点。   

  注意: 默认示 Unicode字符集 配置, 如果选择使用 多字节字符集,则不需要配置Qt的字符选项。

  

  关于“多字节字符集”和“Unicode字符集”的说明

    字符集是一种“字符符号”的集合,同时代表一种编码形式。但是相同类的字符集有多种“编码形式”。

    早期的VC IDE采用多字节字符集作为默认的设置。由于编译的软件适应国际化的需求,因此现在的VS IDE 默认采用 Unicode 字符集。因此,一般推荐使用Unicode的方式,因为它可以适应各个国家语言,在进行软件国际时将会非常便得。

  C++基本数据类型中表示字符的有两种:char、wchar_t区别  

    char叫多字节字符(多字节字符集),一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’中’)用3个char(三个字节)表示,看下面的例子。

    wchar_t被称为宽字符(是采用Unicode字符集),一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英文还是中文。

    用法:

      多字节字符(char)串常量时用一般的双引号括起来就可以了。

      宽字节字符(wchar_t)串常量时要在引号前加L,如L”String test”

  VSIDE中设置“Unicode字符集”和“多字节字符集”的对系统的影响

    预定义的影响:当设置为Unicode Character Set时,会有预编译宏:_UNICODE、UNICODE

    在C/C++ 预定义配置中,可以看到:

    

    当设置为Use Multi-Byte Character Set时,会有预编译宏:_MBCS

    

    对VS 数据类型的影响:

      多字节字符集(MBCS),与 Unicode字符集 不同设置,对Visual C++ 内置的宏定义影响也不一样,如下图:

      当设置为MBCS时:     TCHAR 则指char(多字节字符类型); LPTSTR 则指代 char*,

      当设置为Unicode时:   TCHAR 则指wchar_t(多字节字符类型); LPTSTR 则指代 wchar_t*, 

      其他宏则分别指明了类型:“W”值宽字节 wchar_t, 否则不带W的,则是“多字节 char类型”

      

    相互转换方法:

      LPWSTR->LPTSTR: W2T(); 

      LPTSTR->LPWSTR: T2W(); 

      LPCWSTR->LPCSTR: W2CT(); 

      LPCSTR->LPCWSTR: T2CW();

      ANSI->UNICODE: A2W(); 

      UNICODE->ANSI: W2A();

    字符串函数:

      还有一些字符串的操作函数,它们也有一 一对应关系

     

    一般带有前缀w(或后缀W)的都是用于宽字符的,而不带前缀w(或带有后缀A)的一般是用于多字节字符的。

 

“常规”选项页(文件)

1、从生成中排除:指定文件是否应在当前配置的生成中。

2、内容:输出窗口显示的信息

3、项目类型:

  可以针对该文件,进行“自定义生成工具”。

  注意:当设置为“自定义生成工具时”,则左侧出现“自定义生成工具选项”

 

“命令行”属性

  大多数属性页文件夹都包含“命令行”属性页。

  该页显示在文件夹中设置了哪个属性。

  “命令行”属性页还包含一个“附加选项”框,在此框中可以指定对工具有效但在文件夹中没有相应属性的属性。

  在编辑框中输入的任何命令将传递给文件夹的工具。 不进行输入验证或检查,也没有任何依赖项检查。

 

C++ 调试配置的项目设置

所有和“调试配置”相关的设置:

1、在“要启动的调试器”列表框中指定要使用的调试器

  选择将影响属性的内容变化。

  每当您保存解决方案时,每个调试属性设置均自动写入并保存到解决方案的“每用户”文件 (.vcxproj.user) 中。

  可选配置如下:

    本地 Windows 调试器

    远程 Windows 调试器

    Web 浏览器调试器

    Web 服务调试器

1、二级设置

  命令(本地 Windows 调试器)    

    指定在本地计算机上用于启动要调试程序的命令。

  远程命令(远程 Windows 调试器)  

    远程计算机上的 .exe 的路径。 可以像在远程计算机上一样输入路径。

  命令参数(本地 Windows 调试器和远程 Windows 调试器)

    为前面指定的命令指定参数

    

  工作目录(告诉编译器调试的exe什么地方)

    指定要调试的程序的工作目录(相对于 EXE 所在的项目目录)。

    如果将此设置保留为空,则工作目录将为项目目录。 对于远程调试,项目目录将位于远程服务器上。

  附加(本地 Windows 调试器和远程 Windows 调试器)  

    指定是启动应用程序还是附加到应用程序。   

    默认设置为“否”。

  远程服务器名称(远程 Windows 调试器)  

    指定您要在其上调试应用程序的计算机(不是您的计算机)的名称(远程计算机的名称)  

    RemoteMachine 生成宏被设置为此属性的值

  连接(远程 Windows 调试器)  

    允许您在远程调试的标准与非身份验证连接类型之间切换。在“远程服务器名称”框中指定远程计算机的名称。 连接类型包括:

    带 Windows 身份验证的远程访问

    不带身份验证的远程访问(仅限本机)

      注意:不带身份验证的远程调试可能会使远程计算机容易受到安全攻击。 Windows 身份验证模式更安全。

  HTTP URL(Web 服务调试器和 Web 浏览器调试器)  

    指定您要调试的项目所在的 URL。调试Web 服务,以及URL网站Web功能调试。

  调试器类型  

    指定要使用的调试器类型:“仅限本机”、“仅限托管”、“仅限 GPU”、“混合”、“自动”(默认)或“脚本”。

  环境(本地 Windows 调试器)  

    为要调试的程序指定环境变量。   

    使用标准环境变量语法(例如,PATH="%SystemRoot%\ … …")。   

    根据“合并环境”设置的不同,这些变量将重写系统环境或与系统环境合并。   

    在设置列中单击时,会出现“编辑…”。 单击该链接可编辑环境变量。

  合并环境(本地 Windows 调试器)  

    确定在“环境”框中指定的变量是否与操作系统定义的环境合并。 默认设置为“是”。

  部署目录(远程 Windows 调试器)  

    指定项目输出在启动前要被复制的远程计算机上的路径。   

    路径可以是远程计算机上的网络共享,也可以是到远程计算机上的文件夹的路径。   

    默认设置为空,这意味着项目输出未复制到网络共享。   

    若要启用文件的部署,您还必须在“配置管理器”对话框中选中“部署”复选框。

  其他要部署的文件(远程 Windows 调试器)  

    如果“部署目录”属性已设置,则它是一个要复制到部署目录中的分号分隔的附加文件列表。   

    默认设置为空,这意味着不会将其他文件复制到部署目录中。   

    若要启用文件的部署,您还必须在“配置管理器”对话框中选中“部署”复选框。

  部署 Visual C++ 调试运行库(远程 Windows 调试器)  

    如果“部署目录”属性已设置,则它可以指定当前平台的 Visual C++ 调试运行库是否应被复制到网络共享中。 默认设置为“是”。

 

“C/C++”文件夹(“常规”类别)

调试信息格式 (/Z7、/Zd、/Zi、/ZI)

  指定要为项目创建的调试信息类型, 并选择是将此信息保存在对象(.obj)文件中,还是保存在程序数据库(PDB)中。

  默认选项 (/ZI) 以“编辑并继续”的兼容格式创建程序数据库 (PDB)。

选项类型:/Z{7|i|I}

1、无

  不生成任何调试信息,因此编译较快。

2、/ZI(debug 模式下默认选项)    

  采用支持“编辑并继续”功能的格式生成程序数据库(如上所述)。 如果想使用“编辑并继续”调试,则必须使用此选项。     

  因为大多数优化与“编辑并继续”不兼容,所以使用 /ZI 会禁用代码中的所有 #pragma optimize 语句。     

  /ZI 会导致在编译中使用 /Gy(启用函数级链接) 和 /FC(所诊断源代码文件的完整路径)。     

  /ZI 与 /clr(公共语言运行时编译) 不兼容。

3、/Zi (Release 模式默认选项)

  生成一个程序数据库(PDB),其中包含供调试器使用的类型信息和符号化调试信息。

  符号化调试信息包含变量的名称和类型以及函数和行号。

  /Zi 不影响优化。 但是,/Zi 的确暗示了 /debug;

  类型信息放置在 .pdb 文件而不是 .obj 文件中。

4、/Z7

  生成包含用于调试器的完整符号调试信息的 .obj 文件。 符号化调试信息包含变量的名称和类型以及函数和行号。 不生成任何 .pdb 文件。

编译器将程序数据库命名为 project.pdb。

如果编译没有项目的文件,则编译器将创建名为 VCx0.pdb. 的数据库,其中 x 是正在使用的 Visual C++ 的主版本。 

编译器将 PDB 的名称嵌入每个使用此选项创建的 .obj 文件中,从而使调试器了解符号和行号信息的位置。 

当使用此选项时,.obj 文件将较小,因为调试信息存储在 .pdb 文件中而不是 .obj 文件中。

 

“链接器”属性

常规选项属性配置

1、忽略导入库

  默认否。即不忽略导入库。

  Tells the linker not to try to link any .lib output generated from this build into any dependent project.

  通知链接器不要尝试将任何从此生成产生的 .lib 输出链接到依赖项目中。 这允许项目系统处理生成时不产生 .lib 文件的 .dll 文件。 如果一个项目依赖另一个产生 DLL 的项目,项目系统将自动链接该子项目产生的 .lib 文件。 这对产生 COM DLL 或纯资源 DLL 的项目可能不是必需的,这些 DLL 没有任何具有特定意义的导出。 如果 DLL 没有导出,链接器将不生成 .lib 文件。 如果磁盘上不存在导出 .lib 文件,而项目系统通知链接器链接此(缺少的)DLL,链接将失败。

  使用“忽略导入库”解决此问题。 当设置为 Yes 时,项目系统将忽略此 .lib 文件是否存在,并使依赖该项目的任何项目不链接到不存在的 .lib 文件。

 

posted @ 2022-06-09 19:07  Citrusliu  阅读(3658)  评论(0编辑  收藏  举报