Visual Studio 个 makefile 项目的自定义平台

Custom platforms for Visual Studio makefile project

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

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

Error MSB8006 The Platform for project 'codegen.vcxproj' is invalid. Platform='win64'. This error may also appear if some other project is trying to follow a project-to-project reference to this project, this project has been unloaded or is not included in the solution, and the referencing project does not build using the same or an equivalent Platform.

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

编辑:我可以通过使我的所有配置都采用 _ 形式并在实际平台字段中使用像 x64 这样的占位符来解决这个问题,但我仍然有兴趣听听是否有真正的解决方案。

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

<SkipInvalidConfigurations>True</SkipInvalidConfigurations>

更新 以上适用于 VS2013 但不适用于 VS2015。对于后者,似乎没有适当的内置方法来跳过平台检查。如果你真的想要你可以绕过并通过添加属性 like

强制跳过平台检查
<PlatformTargetsFound>True</PlatformTargetsFound>

但我不推荐它。正如评论中提到的:如果你想要 IDE 不幸的是你必须遵守它的规则,这实际上意味着如果你告诉 IDE 'look I have a C++ project using nmake' 那么必须有一个平台目录你想要在程序 Files\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms 中。

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

的目标