2009-10-05 124 views
5

我想有不同的项目依赖项,具体取决于我目前正在构建的项目配置。如何为每个项目配置设置不同的项目依赖关系?

例如,我不想在Release配置中构建和链接SomeTestLib.vcproj,但我想在Debug中构建并链接到它。

一个解决方案,那八九不离十的作品,是使用条件编译宏:

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

但在这种情况下,调试器和智能感知没有为SomeTestLib工作。
是否有.sln或.vcproj破解我可以使用?
谢谢。

回答

6

在Google搜索了几天之后,我终于放弃了寻找解决这个问题的方法,并且吹了一个VS开发人员,他给了我这个问题的解决方法(实际上,我尝试了一些不同的东西来找到这个问题)。

显然,IDE不够聪明,无法知道您在给定配置下禁用了特定库的构建,也没有将该项目的输出添加到链接器命令行中以获取依赖它的项目。我相信你知道这一点。

但是,由于它只是将库项目的输出行粘贴到从属项目的命令行中,所以将输出行设置为“”将导致NOTHING被添加到依赖项目的链接器命令行中!

希望这个问题将来会在Visual Studio中得到纠正。我保持乐观,因为它是我最喜欢的IDE,我对它支持的功能印象深刻。然而,我见过的一些VS帮助线程说这个bug是“按设计”的,所以也许他们不会修复它。虽然这似乎很容易做到。

不管怎么说,概括地说:

  • 右键单击在Solution Explorer中的库项目,并单击“属性”。
  • 切换到您的库项目不为其构建的“配置/平台”对。
  • 选择“Configuration Properties - > Librarian - > General”。
  • 对于“输出文件”,输入“”(即打开parens,空格,关闭parens)。
  • 单击确定。

请注意,如果您构建或清理禁用的库项目,此解决方法会给您带来错误。如果你只是建立你的解决方案,它将被禁用配置,所以你不会得到错误。

希望这会有所帮助!

丹尼尔

+0

谢谢,这太棒了! 另一件事:如果您正在链接的依赖项恰好是.dll,那么您还可以将导入库的名称设置为“”,它将被忽略。该选项位于链接器 - >高级 - >导入库。 – k0dek0mmand0 2010-01-20 11:26:10

0

在visual studio中,每个构建配置会为您的项目保留自己的属性列表。只需将你的lib添加到你想要的任何构建配置。只是不要添加到“所有配置”

+0

我实际上是问一个项目是解决方案的一部分,而不是外部库。我知道你在暗示的选项。我想要实现的是在某些解决方案配置中将项目依赖项标记为非活动状态。 – k0dek0mmand0 2009-10-05 09:49:05

0

右键单击您的解决方案并选择属性。解决方案属性页会显示出来..

在右侧页面中选择配置属性>>>配置

在这里,您可以选择调试,发布构建配置,并通过检查标为构建复选框所有构建类型。

+0

如果我理解正确,在这里取消选中一个项目将会阻止它被构建。但是,如果这个未经检查的项目被标记为项目依赖项,则链接器将会投诉(找不到SomeTestLib.lib)。 – k0dek0mmand0 2009-10-05 09:45:41

+0

如果已经构建并且程序集存在于同一目录中,则不会。由于当您构建项目时,除GAC中安装的所有依赖项外,其他所有依赖项都将复制到该程序集的私有文件夹中。然而,由于它依赖于其他程序集,并且在该程序集的源代码中进行了更改,因此它将首先构建所有依赖项。 – 2009-10-05 10:00:58

+0

好的,但我甚至不想在Release配置中构建SomeTestLib,这就是整个问题。 :) – k0dek0mmand0 2009-10-05 10:10:00

2

可以关闭从属项目中的链接器/常规/链接库依赖项属性,并将库存入链接器输入中的相关配置中。

它使项目引用不太有用,但是可行。

1

设置在项目属性配置类型对功利的,而不是应用程序/库 - >常规..

0

在主体工程,进入配置属性 - >链接器 - >输入,在标题为“忽略特定库”的部分添加您想要提交的库,例如:.lib。除了忽略不同的lib/dll之外,对其他配置再次执行此操作。最后,如果你不想让每个项目都建立这两个配置,右键点击解决方案 - >项目依赖关系 - > [选择主要/顶级项目] - >取消选择你不想建立/忽略。

此方法的优点是,如果需要,您仍然可以手动构建每个项目,但可以切换配置并仅构建/使用所需的lib/dll。