我有一个基于makefile的项目,我编写了一个实用程序来生成VS 2015项目文件,并将它们连接到makefile命令,这样我就可以拥有这两个世界中最好的。
不幸的是,我遇到了一个问题,Visual似乎不允许使用自定义平台名称。例如,如果我的makefile定义了两个平台,"Win32“和"Win64",那么在用VS构建项目时(这只是进行命令行调用),我会得到以下错误:
错误MSB8006项目'codegen.vcxproj‘的平台无效。平台=‘win64 64’。如果其他项目试图遵循对此项目的项目对项目的引用,此项目已卸载或未包含在解决方案中,并且引用项目没有使用相同或等效的平台生成,也可能出现此错误。
如果我将win64重命名为x64,那么它可以正常工作,因为这是Visual识别的平台,但这并不能解决根本的问题,即我不希望仅限于Visual所知道的平台。我不明白为什么这会成为makefile项目的一个问题,因为我没有在Visual中调用编译器。有没有人知道有一种方法可以骗过Visual,让它接受无法识别的makefile项目平台?
编辑:我可以通过让我的所有配置都采用表单来解决这个问题,并在实际的平台字段中使用像x64这样的占位符,但是如果有真正的解决方案,我还是会感兴趣的。
发布于 2016-08-08 07:34:42
在导入Microsoft.Cpp.props之前,在项目文件顶部附近添加此属性:
<SkipInvalidConfigurations>True</SkipInvalidConfigurations>
更新上面的工作为VS2013,但不是VS2015。对于后者,似乎没有适当的内置方式来跳过平台检查。如果您真的想要的话,可以通过添加如下的属性来强制跳过平台检查。
<PlatformTargetsFound>True</PlatformTargetsFound>
但我不推荐。正如注释中提到的:如果您想要IDE,不幸的是您必须遵循它的规则,这实际上意味着如果您告诉IDE‘我有一个使用nmake的C++项目’,那么程序Files\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms.中必须有您想要的平台的目录
最终的解决方案是创建一个自定义项目类型,它只是作为文件的容器,并具有构建/清理/重建目标。我不知道如何正确地做到这一点,这超出了这个问题的范围,但是一个好的开始是摆脱行和在prject文件中添加一个名为'Build‘的目标。
https://stackoverflow.com/questions/38821968
复制相似问题