Kev*_*n K 3 msbuild build visual-studio
我正在尝试彻底检查项目的构建过程.我们有去年从Visual Studio 2005升级到Visual Studio 2013的~330个Visual C++项目.我想利用MSBuild来改善我们现在的串行构建脚本的构建时间.我已经完成了粗略的第一遍,并将发布版本的构建时间从大约2小时减少到大约20分钟.在执行此操作的过程中,我正在将许多常见项目设置合并到.props文件中.在这样做的过程中,我遇到了绊脚石.
我希望将Platform Toolset从一个VSProps文件继承到包含它的所有项目.在我创建的新.props文件的顶部,我提出以下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="Configuration">
<PlatformToolSet>v120</PlatformToolSet>
</PropertyGroup>
<PropertyGroup Label="UserMacros" />
Run Code Online (Sandbox Code Playgroud)
然后我<PlatformToolSet>v120</PlatformToolset>从单个项目文件中删除了相应的.
唉,事情已经开始走下坡路了.项目(在Visual Studio 2013中)现在在解决方案资源管理器中说出类似的内容CoreGeometry (Visual Studio 2010),项目本身似乎想要引用v100平台工具集.当我建立时,它然后抱怨我:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(362,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(341,5): error MSB6006: "CL.exe" exited with code -1073741515.
我能够解决这个问题的唯一方法是在.vcxproj上手动设置PlatformToolset,这并不可怕,我只是有点恼火,其他所有属性似乎都继承,但PlatformToolset却没有.
我的问题是:我可以使用.props文件将公共PlatformToolSet继承到没有指定平台工具集的.vcxproj中吗?
第二个问题:我是否应该以这种方式搞乱平台工具集?或者我为自己设置维护噩梦的风险?
将常用设置提取到单独的.props文件以及<Import>从所有项目中提取是非常好的做法.我对我的项目做了同样的事情,包括PlatformToolset在.props文件中配置属性,我没有遇到任何问题.
与此相关的几点:
PlatformToolset财产或任何其他财产没有什么特别之处.配置.props文件中的属性与直接在.vcxproj文件中设置它相同(但请参阅下面关于排序的观点).当然,有一些内置属性,您根本无法配置,但这些属性始终是只读属性.msbuild mysolution.sln /p:Platform=x86将所有使用Platform属性设置为x86和在项目中覆盖的内容都不会生效).<Import>的.props文件命令始终能够通过设置.props文件的绝对路径来找到.props文件.其次,确保Label为<PropertyGroup>配置文件中的元素指定属性,就像在.vcxproj文件中指定的那样.<Import>元素位于正确的位置.通常你希望它在导入标准.targets和.props之前是第一个Import,比如Microsoft.Cpp.defaults.props等.原因是msbuild通过对语句执行顺序扫描来工作,所以指令的顺序很重要.为了使#3和#4更容易,这里是一个指定.props文件的绝对路径的技巧.假设您的解决方案名称是MySolution.sln,自定义道具文件是MyCustomProps.props,放在解决方案所在的同一目录中:
<PropertyGroup>
<RootFolder>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),MySolution.sln))</RootFolder>
</PropertyGroup>
<Import Project="$(RootFolder)\MyCustomProps.props" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |