visual-studio-2010 - 视觉 C++ 2010 : Including boost in several projects in a solution?

标签 visual-studio-2010 visual-c++ configuration dry propertysheet

我正在使用 boost library在我的 Visual C++ 2010 解决方案中的几个项目中。我目前正在做的是通过设置修改每个项目的属性:

  1. Properties->Configuration Properties->C/C++->General->Additional Include Directories 包含boost目录C:\boost\boost_1_47

  2. Properties->Configuration Properties->Linker->General->Additional Library Directories to include the boost lib directory C:\boost\boost_1_47\lib

现在我正在将我的提升版本升级到 1.51,我意识到我通过多次指定此信息(即每个项目一次)违反了 DRY。我想在一个地方定义增强信息。

研究后好像是Property Sheets是一个很好的解决方案。我已经阅读了有关属性表继承的内容,但我看不出它有什么用,因为似乎如果您想添加特定于项目的包含目录,那么您将必须在该特定项目的属性中设置附加包含目录然后将覆盖定义 boost 包含目录的继承属性表。如果我对此有误,请纠正我。

所以我的下一个想法是创建一个名为 GlobalMacros.prop 的单一属性表,并定义一个类似 $(BoostDir) 的用户宏,然后将此属性表添加到每个项目。然后我可以在定义包含目录和库目录时在每个项目的属性中使用宏。但是,在创建宏时,有一个选项“将此宏设置为构建环境中的环境变量”,我不确定它的作用或是否应该设置它。

总的来说,我想知道减少常用设置的重复配置定义的最佳方法是什么?

最佳答案

我实际上是最初在 VS 2005 中使用 Visual C++ 实现属性表的开发人员(尽管我不对 VC++ 项目属性对话框的困惑负责)。警告:我在 2005 年之后停止了 VC++ 的工作,因此以下内容可能不完全适合您的版本。

在属性管理器中,您应该能够在所有项目中多选所有项目配置并添加新的属性表。这将自动从同一属性表继承那些项目配置。在该属性表中,直接设置 boost 包含和库目录或为 BoostVersionBoostDir 使用宏,并在属性表的属性中使用这些宏。

前提是项目配置已选中“从父项或项目默认值继承”(这控制在 2005/2008 中插入 $(Inherit) 与 $(NoInherit) 以及在 2010/2012 中插入 %()) ,您应该会看到项目配置中设置的所有项目特定属性,默认情况下,这些属性设置在属性表中的值之前。

您可以通过转到项目并检查编译器的“命令行”选项卡以查看开关是否符合您的预期来确认这一点。

编辑:请注意,在 VC++ 中有两种类型的属性:“单值”和“多值”。单值属性的一个示例是编译器的警告级别。单值属性命令行上的值来自指定它的属性继承链中的第一个位置,从项目配置开始,然后是属性表,然后是项目系统中的内置默认值。多值属性的一个示例是编译器的包含目录。除非指定 $(NoInherit) (2005/2008) 或未指定 %() (2010/2012),否则多值属性与其父属性表连接在一起。因此,默认情况下,您应该会在项目设置中看到提升路径,前提是它们有意不从属性表继承属性。

关于visual-studio-2010 - 视觉 C++ 2010 : Including boost in several projects in a solution?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006905/

相关文章:

python - 可插拔应用程序的Django默认设置约定?

c# - 使用 GhostscriptProcessor 创建 PDF/A

c++ - 使用指向我的数组的指针在 C++ 中给我一个 "Unhandled exception"?

magento - Magento更改管理员中选择字段的默认值

c++ - 为什么我需要宏的双层间接?

c++ - 使用三元表达式返回引用会导致运行时错误

Emacs:符号作为变量的值是无效的:custom-theme-load-path

visual-studio-2010 - 在 TFS2010 构建定义中指定构建配置时出现问题

.net - 如何使用报表查看器 10.0 在 rdlc 中显示枚举的字符串表示形式

c# - Z39.50 来自服务器的不可读响应