我有一个基于makefile的项目,我编写了一个实用程序来生成VS 2015项目文件并将它们连接到makefile命令,以便我可以充分利用这两个世界。
不幸的是,我遇到了Visual Studio似乎不允许使用自定义平台名称的问题。例如,如果我的makefile定义了两个平台," Win32"和" Win64",在尝试在VS中构建项目时(它只是进行命令行调用),我收到以下错误:
错误MSB8006项目平台' codegen.vcxproj'是无效的。平台=' Win64的&#39 ;.如果某个其他项目正在尝试遵循项目到项目对此项目的引用,此项目已卸载或未包含在解决方案中,并且引用项目不使用相同或等效项目构建,则也可能出现此错误平台。
如果我将win64重命名为x64,那么它可以正常工作,因为Visual Studio可以识别这个平台,但这并不能解决我不想限制的基本问题。只是Visual Studio知道的平台。我不明白为什么这甚至会成为makefile项目的问题,因为我没有在Visual Studio中调用编译器。有没有人知道如何欺骗Visual Studio接受makefile项目的无法识别的平台?
编辑:我可以通过使我的所有配置采用表单_并且只使用x64的占位符作为实际平台字段来解决它,但是如果有真正的解决方案,我仍然有兴趣听听。
答案 0 :(得分:1)
在导入Microsoft.Cpp.props之前,在项目文件顶部附近添加此属性:
<SkipInvalidConfigurations>True</SkipInvalidConfigurations>
更新以上适用于VS2013的工作,但不适用于VS2015。对于后者,似乎没有一种适当的内置方式来跳过平台检查。如果你真的想要你可以通过添加像
这样的属性来破解并强制平台检查被跳过<PlatformTargetsFound>True</PlatformTargetsFound>
但我不推荐它。正如评论中所提到的:如果你想要IDE你不幸地必须遵循它的规则,这实际上意味着如果你告诉IDE看起来我有一个使用nmake的C ++项目'那么必须有一个你想要的平台的目录Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms。
最终的解决方案是创建一个自定义项目类型,它只是作为文件的容器,并具有Build / Clean / Rebuild目标。我不知道如何正确地做到这一点并且它超出了这个问题的范围,但一个好的开始是摆脱行和prject文件并添加一个名为'Build'的目标。