【问题标题】:How do I fix warning MSB8012 in a static library project in Visual C++ 2010?如何在 Visual C++ 2010 的静态库项目中修复警告 MSB8012?
【发布时间】:2013-05-28 09:43:16
【问题描述】:

我正在尝试将静态库从 VC++2008 转换为 VC++2010,我得到了 这些关于 TargetPath 和 TargetName 的警告。我查看了我的配置 我不知道如何让这些消失。对于我通常构建一次并且很少重新构建的静态库,它是严重的还是真的只是一个可忽略的警告。

我认为这与项目名为itk32的事实有关,但库的调试版本名为itk32d.lib,并且在Visual C++ 6.0时代的旧配置方式导致了一些留在vc2010中的奇怪设置 项目,前段时间从 VC6 转换到 2008,我现在正在转换到 2010:

1>------ Build started: Project: Itk32, Configuration: Debug Win32 ------
1>...\Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(C:\...\Libraries\Itk\.\Debug\Itk32d.lib.lib) does not match the Library's OutputFile property value (C:\...\Libraries\Itk\Debug\Itk32d.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
1>...\Microsoft.CppBuild.targets(1153,5): warning MSB8012: TargetName(Itk32d.lib) does not match the Library's OutputFile property value (Itk32d). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

【问题讨论】:

标签: visual-c++ static-libraries visual-c++-2010


【解决方案1】:

在 VS2010 中对构建系统进行了大修,现在它使用 MSBuild 而不是自定义的 VCBuild 系统。 VS 支持的其他语言使用的相同构建系统。他们做得很好,使那些不可见的旧项目通常可以正常构建。但是,当您导入旧项目时,有些地方可能会遇到麻烦。这就是这个警告的意思。

使用链接器的 General + Output File 设置来命名输出文件就是这样的麻烦之一。实际上并不确定会出现什么问题,它可能与依赖检查有关。它的默认设置是 $(OutDir)$(TargetName)$(TargetExt)。因此,重命名输出文件的最佳方法是更改​​ $(TargetName) 宏值。

“目标名称”设置在“常规”主页上可用。它在早期的 VS 版本中不存在。因此,将其更改为“itk32d”。或者更好的是,$(ProjectName)d。并重置链接器设置。

【讨论】:

  • 所以看起来以前版本的 Visual C++ 允许一些相当奇怪的结构将生成的 .dll、.exe 和 .lib 结果(输出文件)复制到不同的目录,如果我重置输出设置,然后做一个后期构建步骤,将文件“移动到新位置”部分,它会让 MSBUILD 系统满意吗?
  • 我完全不知道你是如何从我的回答中得出这个结论的 :) 我专注于导致警告的特定设置以及如何调整项目设置以避免它。只需几分钟即可尝试。
  • 我花了一个小时玩你提到的设置,我的大脑现在已经符合潜在的现实。换句话说,谢谢,伙计。就我而言,上面的评论更多是关于我自己的项目结构,似乎在导入 VS 2010 后,它确实没有生成匹配的目标和输出文件名属性。 (不同的目录级别,一个比另一个有更多的 `..\..\..` 类型的相对上行路径)
  • 更改链接器设置,对我也有效,与answer 相同
【解决方案2】:

我遇到了这个问题,但在 SO 中找不到有效的答案,最终我发现它是通过将 中间目录 从“.\Debug”修复为“..\Debug”来解决的",并且在每个构建配置中将 ".\Release" 转换为 "..\Release"。

很抱歉,这只是值得评论,但我没有足够的积分将 cmets 添加到其他人的帖子中。

【讨论】:

  • 这听起来真的是你的项目布局所特有的。
  • 这必须根据您的项目的具体情况进行调整,但它会为您指明相关设置。
【解决方案3】:

遇到过类似的问题,但我能够使用以前版本的约定将参数的 $(ConfigurationName) 更改为 $(Configuration).. 我无法想象这样的事情,但是当我检查是这种情况时,命名约定改变了,重新解释大部分是有效的,但很少有事情没有完全解释,这就是原因..

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多