20

我正在尝试在 Visual Studio 2010 上构建gtest。转换解决方案文件后,我尝试构建,并收到以下警告消息。

Warning 1   warning MSB8012: 
TargetPath(C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest/Debug\gtest.lib) does not match
the Library's OutputFile property value (C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest\
Debug\gtestd.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).  
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets

消息说我需要设置变量$(OutDir)$(TargetName)以及$(TargetExt)中指定的属性值%(Lib.OutputFile)

我如何使用 Visual Studio(尤其是 VS 2010)做到这一点?

4

7 回答 7

29

我看到了。右键单击 gtest 项目,属性,配置属性,常规。确保选择了调试配置(左上角组合)。将目标名称属性更改为

 $(ProjectName)d

请注意添加的“d”以将名称从 gtest 更改为 gtestd。该警告在其他方面是良性的。

于 2011-01-10T20:20:53.827 回答
8

我认为没有人有正确的答案,我是这样解决的:在项目属性页面中,检查是否linker->General->Output file匹配configuration properties->General->target name& configuration properties->General->target extension

您不需要添加任何 'd',当然,Inherit from parent or project defaults对于所有 3 个变量,设置为更简单。

例子:

Linker → General → Output File = "myproject.exe"

然后:

Configuration Properties → General → Target Name = "myproject"

configuration properties → General → Target Extension = ".exe"
于 2014-05-13T00:34:59.873 回答
4

该警告是虚假的 - 假设您使用的是 Google Test,它工作得很好

但是,您可以让它消失。右键单击有问题的项目并选择属性。在左侧的树视图中选择“Librarian”,然后通过单击输出文件旁边的框并选择“从父​​级或项目默认值继承”来更改右侧的“输出文件”项。

于 2011-01-10T20:16:11.020 回答
3

其背景是微软改变了 $(TargetName) 宏的含义。它曾经的意思是“您在链接器 | 输出文件中输入的任何文件名,减去扩展名”。他们将其更改为“默认情况下,您的项目的名称”。(在我看来,这是你不应该做的事情;他们应该添加一个新的宏)。

虽然 VS2008 及更早版本能够从链接器设置中解析文件名,但显然他们无法在迁移到新版本时将其解析出来,从而导致我们的配置被破坏。

警告本身可能并不重要,但是如果您使用 $(TargetName),例如将其传递给批处理文件,则此更改将破坏您的批处理过程。

对我们来说,解决方案是从 Linker | 复制文件名(减去扩展名)。输出文件到一般 | Target Name,然后设置 Linker | 输出文件“从父/默认继承”。这是因为我们使用诸如“d”(用于调试)、“u”用于 Unicode、_64 用于 64 位等后缀。

另一方面,如果您的输出文件始终与项目名称匹配,那么您需要做的就是设置 Linker | 输出文件到“继承默认值”,原则上你就完成了——只要你想要的编译文件的输出目录与 General | 输出目录。

这种变化绝对令人愤怒,因为它涉及移动数百个设置,据我所知,这完全是由于微软的懒惰。

于 2017-05-30T14:41:12.683 回答
3

我只是想在Visual Studio 2019中编译我上次在Visual Studio 2005中编译的应用程序。我遇到了同样的警告。

我想我会用屏幕截图直观地展示我所做的事情。

解决方案名称 v 目标名称

如您所见,我的变量都设置为Import Text

图 1

我本可以将其设置$(TargetName)ImportText来解决我的问题。但是,我们将保持这些值不变。

链接器/通用输出文件

这就是我设置输出文件的方式:

图 2

请注意,我已将输出目标名称覆盖为ImportText。这是 10 多年前的事了,我没有那么多经验。

通用/目标名称

所以我所要做的就是在这里做同样的调整:

图 3

现在它编译文件。

于 2019-04-28T08:46:08.840 回答
2

将旧项目升级到 Visual Studio 的新版本(例如在您的情况下升级到 VS2010)以及可能已手动更改项目设置(例如更改可执行文件名称)时,通常会出现此类错误。我们知道 VS2010 使用这些宏$(ProjectName) $(TargetName) $(OutDir) $(TargetExt)来控制发布/调试输出,但在哪里更改它们通常是个谜。我们通常通过项目>>属性直接更改输出文件的名称。这意味着我们现在必须分别更改输出文件以进行调试和发布构建,如果有任何依赖关系,我们将收到类似This may cause your project to build incorrectly..

这些宏/属性是 VS2010 的默认值,但您可以通过在记事本中编辑它们自己在 .vcproj 文件中设置它们。注意首先在 .vcproj 文件中搜索属性,如果它在那里而不是更改它的值,如果没有像下面那样定义它。

  <PropertyGroup Label="My Values">
    <ProjectName>New_Project_Name</ProjectName>
  </PropertyGroup>

上面我定义了一个新<property group>的来保留这些值,但你可以在任何地方定义它们。我在调试/发布配置组之后在文件顶部定义了它,因此它随处可见。确保您的项目属性设置正确以正确使用它们(它们应该是 VS2010 默认设置)。如果你改变了它们,你应该从新的测试项目中复制它。当然,您也可以在上述组中添加要为其设置值的其他宏。

您还可以通过项目属性验证此宏的新值。例如,单击配置属性>>常规,然后单击“目标名称”框。选择编辑。它将弹出一个带有按钮的对话框'MACROS >>'。单击它,它将显示每个宏的值是什么。它应该正确反映您在 .vcproj 文件中设置的新值。

于 2014-02-20T15:42:43.363 回答
1

正如 Hans Passant 发布的那样,您需要手动修改 TargetName 属性。这在 VS2005/2008 和 VS2010 之间是不同的。请参考http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c

于 2013-03-27T03:14:16.883 回答