如何针对每个项目配置设置不同的项目依赖关系?

7
我希望根据我当前正在构建的项目配置,有不同的项目依赖关系。
例如,在Release配置中,我不想构建和链接SomeTestLib.vcproj,但是我想在Debug配置中构建和链接它。
一种可行的解决方案是使用条件编译宏。
#ifdef DEBUG  
#pragma comment( lib, "SomeTestLib" )  
#endif

但在这种情况下,调试器和IntelliSense不能为SomeTestLib工作。
有没有我可以使用的.sln或.vcproj技巧?
谢谢。

6个回答

7
在Google上搜索了几天后,我终于放弃了寻找解决此问题的办法,并咨询了一位VS开发者,他为我提供了这个问题的解决方法(事实上,我自己尝试了无数种不同的方法来解决这个问题)。
显然,IDE并不聪明到可以确定您已禁用给定配置下的特定库构建,并且不会将该项目的输出添加到依赖它的项目的链接器命令行中。我相信您已经意识到了这一点。
但是,由于它只是将库项目的输出行粘贴到依赖项目的命令行中,因此将输出行设置为“ ”将导致在依赖项目的链接器命令行中不添加任何内容!
希望在未来的Visual Studio版本中能够解决这个问题。我保持乐观,因为它是我最喜欢的IDE之一,我总是对它支持的功能印象深刻。但是,我看到的一些VS帮助主题说这个错误是“设计如此”,所以也许他们不会修复它。虽然修复起来似乎很容易。
总之,为了总结:
在“解决方案资源管理器”中右键单击您的库项目,然后单击“属性”。
切换到您的库项目不构建的“配置/平台”对。
选择“配置属性->程序库管理员->常规”。
对于“输出文件”,键入“ ”(也就是开括号、空格、闭括号)。
单击确定。
请注意,此解决方法将在您构建或清理禁用的库项目时导致错误。如果您只构建解决方案,则会跳过禁用的配置,因此您将不会收到错误提示。
希望这有所帮助!
丹尼尔

谢谢,这很棒! 另外一件事:如果你链接的依赖项恰好是一个.dll文件,你也可以将导入库的名称设置为“ ”,它将被忽略。此选项位于链接器->高级->导入库下。 - k0dek0mmand0

3

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

这会使得项目引用的功能变得不太有用,但是也是可行的。


1
将项目属性中的配置类型设置为Utility而不是application/library -> General。

0
在Visual Studio中,每个构建配置都会为您的项目保留其自己的属性列表。只需将您的库添加到您想要的任何构建配置中即可。只是不要添加到“所有配置”。

我实际上是在询问解决方案的一部分而不是外部库的项目。我知道你建议的选项。我想要实现的是在某些解决方案配置中标记项目依赖项为非活动状态。 - k0dek0mmand0

0
右键单击您的解决方案,然后选择属性。解决方案属性页面将显示出来。
在右侧页面中选择“配置属性” >>> “配置”。
在这里,您可以通过选中标记为“构建”的复选框来选择调试、发布和所有构建类型的构建配置。

如果我理解正确,在这里取消勾选一个项目将阻止它被构建。但是,如果这个未勾选的项目被标记为项目依赖项,链接器将会报错(无法找到SomeTestLib.lib)。 - k0dek0mmand0
如果已经构建并且程序集存在于同一目录中,则不需要。因为在构建项目时,除了安装在GAC中的依赖项之外,所有依赖项都会被复制到该程序集的私有文件夹中。但是,由于它依赖于其他程序集,并且对该程序集的源代码进行了更改,因此它将首先构建所有依赖项。 - S M Kamran
好的,但我甚至不想在发布配置中构建SomeTestLib,这才是重点。 :) - k0dek0mmand0

0
在主项目中,进入“配置属性”->“链接器”->“输入”,在标题为“忽略特定库”的部分中添加你想要忽略的库,例如:.lib。对于另一个配置,再次执行此操作,但忽略不同的lib/dll。
最后,如果你不想让每个项目都构建两个配置,请右键单击解决方案->项目依赖项->[选择主/顶级项目]->取消选中你不想构建/忽略的项目。
这种方法的优点是,你仍然可以手动构建每个项目(如果需要),但可以切换配置并只构建/使用你想要的lib/dll。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接