【问题标题】:Custom platforms for Visual Studio makefile projectVisual Studio makefile 项目的自定义平台
【发布时间】:2016-08-08 05:41:01
【问题描述】:

我有一个基于 makefile 的项目,我编写了一个实用程序来生成 VS 2015 项目文件并将它们连接到 makefile 命令,这样我就可以两全其美了。

不幸的是,我遇到了 Visual Studio 似乎不允许自定义平台名称的问题。例如,如果我的 makefile 定义了两个平台,“Win32”和“Win64”,在尝试在 VS 中构建项目(这只是进行命令行调用)时,我会收到以下错误:

错误 MSB8006 项目“codegen.vcxproj”的平台无效。平台='win64'。如果其他项目试图遵循对此项目的项目到项目引用,此项目已卸载或未包含在解决方案中,并且引用项目未使用相同或等效项构建,则也可能出现此错误平台。

如果我将 win64 重命名为 x64,那么它可以正常工作,因为这是 Visual Studio 识别的平台,但这并不能解决根本问题,即我不想仅限于 Visual Studio 知道的平台的。我不明白为什么这对 makefile 项目来说甚至是一个问题,因为我没有在 Visual Studio 中调用编译器。有谁知道如何欺骗 Visual Studio 接受 makefile 项目无法识别的平台?

编辑:我可以通过使我的所有配置采用 _ 形式来解决这个问题,并且只使用 x64 之类的占位符作为实际平台字段,但我仍然有兴趣了解是否有真正的解决方案。

【问题讨论】:

  • 你的平台被命名为'Win64',所以它很可能是'x64',那你为什么要使用非标准名称来混淆VS和其他人呢?
  • 我可以将其更改为 x64 并避免这种特定情况,但如果我想在将来添加另一个平台(例如 ps4),那么我会遇到同样的问题。
  • 让 IDE 构建程序时,平台名称很重要。它需要选择正确的编译器和链接器来生成正确的可执行文件。所以这个名字不是随意的,你只能选择它所知道的。在大多数机器上是 Win32、x64 和 ARM。当您使用 makefile 项目时,这不再重要,因为现在是 makefile 决定了您使用的编译器/链接器。但是您仍然必须选择一个有效的平台名称。配置名称(默认为 Debug 和 Release)可以是您想要的任何名称。
  • 有道理。太糟糕了,即使使用 makefile 项目也会强制执行,我不明白为什么有必要这样做。但无论如何,我可以通过将所有配置转换为配置和平台的组合来解决它。

标签: c++ visual-studio platform


【解决方案1】:

在项目文件顶部附近添加此属性,在导入 Microsoft.Cpp.props 之前:

<SkipInvalidConfigurations>True</SkipInvalidConfigurations>

更新以上内容适用于 VS2013,但不适用于 VS2015。对于后者,似乎没有适当的内置方法来跳过平台检查。如果您真的想要您可以随意修改并通过添加类似

的属性来强制跳过平台检查
<PlatformTargetsFound>True</PlatformTargetsFound>

但我不会推荐它。如 cmets 中所述:如果您想要 IDE,不幸的是您必须遵循它的规则,这实际上意味着如果您告诉 IDE“看,我有一个使用 nmake 的 C++ 项目”,那么必须有一个您想要的平台目录程序文件\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms。

最终的解决方案是创建一个自定义项目类型,该类型仅用作文件容器并具有构建/清理/重建目标。我不知道如何正确地做到这一点,这超出了这个问题的范围,但一个好的开始是摆脱项目文件中的行并添加一个名为“Build”的目标。

【讨论】:

  • 感谢您的建议,但不幸的是,如果我添加该建议,项目将无法加载。
  • 什么错误?请注意,您必须将属性放在 PropertyGroup 标记中。
  • 啊,将它放在 PropertyGroup 标签中修复了错误,但我仍然遇到了原始问题。这就是我所拥有的:&lt;Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt; &lt;PropertyGroup&gt; &lt;SkipInvalidConfigurations&gt;True&lt;/SkipInvalidConfigurations&gt; &lt;/PropertyGroup&gt; ... more XML
  • True 工作,谢谢!出于兴趣,在我的特定情况下,IDE 只是用作 makefile 的编辑器和包装器,您为什么不建议这样做?
  • 因为这样表述应该确保人们理解这不是一个 100% 好的解决方案,因为 a) 我不知道是否有任何我不知道的后果(尽管我对此表示怀疑) b)它可能会在未来的版本中再次中断。话虽这么说,如果我有一个用例,我会毫不犹豫地使用它:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多