首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告MSB8012 :确保$(OutDir)、$(TargetName)和$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配

警告MSB8012 :确保$(OutDir)、$(TargetName)和$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配
EN

Stack Overflow用户
提问于 2010-12-20 21:16:09
回答 8查看 41.4K关注 0票数 33

在构建代码时,我会得到以下错误。

Linker C:\Program (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5):警告MSB8012: TargetPath(E:\Study\FWIF\demola\ext-libs\libcommoncpp2-1.6.0\w32\Debug\ccgnu2.dll)与

的OutputFile属性值g\CapeCommon14.dll不匹配。这可能会导致您的项目生成错误。要纠正这一点,请确保$(OutDir)、$(TargetName)和$(TargetExt)属性值与%(Link.OutputFile)中指定的值匹配。

我希望有人知道该怎么做。

EN

回答 8

Stack Overflow用户

发布于 2011-03-07 16:39:17

是否将项目从以前的版本升级到Visual 2010?如果是这样,这是一个众所周知的问题.

Visual 2010 C++项目升级指南http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

升级期间的

警告

以下是您在转换过程中可能遇到的一些常见警告:

1)链接器输出目录

升级应用程序时可能会看到的警告之一是MSB8012:$(TargetPath)和Linker的OutputFile属性值不匹配:

  • MSB8012:$(TargetExt) ('.dll')与项目配置中的OutputFile属性值'C:\foo\Debug\MFCActiveX.ocx‘('.ocx')不匹配。这可能会导致您的项目生成错误。要纠正此情况,请确保$(TargetExt)属性值与%(Link.OutputFile).
  • MSB8012:$(TargetPath) (“C:\foo\Debug\MFCActiveX.dll”)中指定的值不匹配项目配置中的OutputFile属性值“C:\foo\Debug\MFCActiveX.ocx”(“C:\foo\Debug\MFCActiveX.ocx”)。这可能会导致您的项目生成错误。要纠正这一点,请确保$(TargetPath)属性值与%(Link.OutputFile).

中指定的值匹配。

Link.OutputFile是在属性页上的Linker ->通用->输出文件中定义的值。默认情况下,它的值是$(OutDir)$(TargetName)$(TargetExt),这与$(TargetPath)的值相同。然而,当我们从上一个版本转换一个应用程序时,解析Link.OutputFile并不是一种简单的方法来确定$(TargetName)和$(TargetExt)的确切值,因为不同的客户可能以不同的方式对它们进行了格式化。为了解决这个问题,我们决定在转换期间保留Linker.OutputFile的值。转换后,$(TargetName)将默认为$(ProjectName)。$(TargetExt)默认为应用程序类型的默认扩展:动态库的.dll、静态库的.lib和应用程序的.exe。Link.OutputFile值将被保留。如果MSB8012和$(TargetPath)不一样,则将在转换日志中发出警告TargetPath。在构建应用程序时,您将收到相同的警告。

代码语言:javascript
运行
复制
$(OutDir), $(TargetName) and $(TargetExt) are exposed on the "General" property page, as "Output Directory", "Target Name", "Target Extension", respectively. You can manually change the values of these properties so that you no longer get the warning.

  • 如果您的项目生成导入库(Linker -> Advanced -> Import ),则如果Linker输出目录不是默认的输出目录,则可能需要在转换后更改Import的输出文件夹。否则,生成的导入库可能在一个与链接器output.
  • Debugging.Command不同的目录中,转换后设置为默认$(TargetPath)。您可能需要进行更改,以便在F5 (调试)或Ctrl + F5 (开始时不进行调试)上启动正确的可执行文件。
票数 29
EN

Stack Overflow用户

发布于 2015-04-19 10:48:58

也见这里的Stackoverflow MSB8012。在将VS2008 C++项目转换为VS2012时对我起了什么作用:右键单击解决方案资源管理器中的项目,在弹出的:配置属性、链接器、通用中选择属性。选择右边的输出文件,这将给出一个下拉,选择来自父或项目默认值的固有内容。单击apply。这给出了默认的链接器设置:$(OutDir)$(TargetName)$(TargetExt)。重新构建项目和警告不应再出现。

票数 8
EN

Stack Overflow用户

发布于 2011-08-29 10:30:41

对于调试DLL,我也遇到了同样的问题,我希望在basename中有一个尾随的"D“。例如,foo.dll (版本)但是fooD.dll (调试)。当您在Debug-Configuration的链接器设置中细化输出名称时,就会出现难看的MSB8012警告。

使用Visual 2010的唯一解决方案似乎是调试配置的Postbuild:

代码语言:javascript
运行
复制
@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4494028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档