C++ 组织项目依赖关系

C++ 组织项目依赖关系,c++,visual-studio,visual-studio-2008,visual-c++,dependencies,C++,Visual Studio,Visual Studio 2008,Visual C++,Dependencies,我和一个相当大的团队在一起,我们在依赖的其他库中遇到了问题,每个库都有相同的项目文件 问题是很多人都有同一个库的多个版本(例如项目用户boost 1.36,我使用boost 1.39来处理我的一些其他东西),每个开发人员在不同的地方都有这些版本(例如我使用C:\lib\C++\boost\u 1\u 36) 因此,现在所有的开发人员都必须为每个项目添加相当多的条目“附加包含目录”和“附加库目录”,这是一种痛苦,尤其是在试图正确设置新成员时(例如,确保每个配置都链接了正确的静态/动态依赖项,而大多

我和一个相当大的团队在一起,我们在依赖的其他库中遇到了问题,每个库都有相同的项目文件

问题是很多人都有同一个库的多个版本(例如项目用户boost 1.36,我使用boost 1.39来处理我的一些其他东西),每个开发人员在不同的地方都有这些版本(例如我使用C:\lib\C++\boost\u 1\u 36)

因此,现在所有的开发人员都必须为每个项目添加相当多的条目“附加包含目录”和“附加库目录”,这是一种痛苦,尤其是在试图正确设置新成员时(例如,确保每个配置都链接了正确的静态/动态依赖项,而大多数库对所有.lib和.dll文件都使用通用名称,而不是像boost那样使用反映配置和自动链接的文件名)


我想在项目属性中使用宏,在“附加包含目录”中使用“$(MYSQL\U HOME)\lib\opt”之类的内容,但是我看不到一种方法来定义我自己的宏(如MYSQL\U HOME))

可以用来帮助管理依赖项和其他常见项目设置。属性表还允许您定义,这是定义自己的宏(如
MYSQL\u HOME

所需的操作,您可以使用这些宏来帮助管理依赖项和其他常见项目设置。属性表还允许您定义,这是定义自己的宏(如
MYSQL\u HOME

有些人可能会建议使用“解决方案构建环境”插件)所需的操作。我建议您不要使用该选项,而是使用属性表,正如詹姆斯所说。避免解决方案生成环境的原因:

  • 它不适用于批生成—它使用当前配置中的环境来生成整个批,这将导致错误的编译器/链接器标志和难以跟踪生成错误(因为如果一次生成一个配置,问题不会出现)
  • 它将第三方依赖关系强加于用户。需要有人安装此加载项才能使用您的项目进行构建
  • 它因解决方案而异,而不是因项目而异。这意味着,其他人可能会将您的项目作为依赖项引入,但不会自动引入项目所需的所有环境设置
  • 很难找到设置的来源。属性表集成到GUI中,并且相当容易浏览<另一方面,code>.slnenv文件没有IDE集成,因此很难跟踪更改
  • 属性表可以定义太多的特定设置,以至于任何给定的
    .vcproj
    文件中的实际设置都是空的。我在属性表中定义所有设置,然后单个项目只需要定义它们继承的属性表。因为解决方案构建环境只定义环境变量(“宏”,MS称之为宏),所以项目文件仍然会充斥着设置,即使它们都只是引用那些环境变量。真是一团糟

  • 有些人可能会建议使用插件“解决方案构建环境”。我建议您不要使用该选项,而是使用属性表,正如詹姆斯所说。避免解决方案生成环境的原因:

  • 它不适用于批生成—它使用当前配置中的环境来生成整个批,这将导致错误的编译器/链接器标志和难以跟踪生成错误(因为如果一次生成一个配置,问题不会出现)
  • 它将第三方依赖关系强加于用户。需要有人安装此加载项才能使用您的项目进行构建
  • 它因解决方案而异,而不是因项目而异。这意味着,其他人可能会将您的项目作为依赖项引入,但不会自动引入项目所需的所有环境设置
  • 很难找到设置的来源。属性表集成到GUI中,并且相当容易浏览<另一方面,code>.slnenv文件没有IDE集成,因此很难跟踪更改
  • 属性表可以定义太多的特定设置,以至于任何给定的
    .vcproj
    文件中的实际设置都是空的。我在属性表中定义所有设置,然后单个项目只需要定义它们继承的属性表。因为解决方案构建环境只定义环境变量(“宏”,MS称之为宏),所以项目文件仍然会充斥着设置,即使它们都只是引用那些环境变量。真是一团糟

  • 除了像
    BOOST\u DIR
    和其他环境变量之外,您还应该努力统一所有开发人员使用的环境。这使得设置自动构建、新工作站和启动新的开发人员变得更容易。除了有
    BOOST\u DIR
    等环境变量外,还应该努力统一所有开发人员使用的环境。这使得设置自动化构建、新工作站和启动新开发人员变得更加容易。