我们在设置构建自动化方面还处于早期阶段,目前仅将 bat 文件用于 Win32 C++ 解决方案。我们有大约 4 个解决方案,每个都有几个 vcproj 文件。
每次添加新的解决方案或配置时,我都必须更新 bat 文件以反射(reflect)新的解决方案或配置以使用 MSBuild 调用。
我想也许编写一个工具来解析给定路径(及其子树)中的所有 sln 文件,然后解析它为配置引用的所有项目文件,然后以这种方式调用所有构建会更容易。
有没有简单的方法来做到这一点?
真的这是 2 个问题:
如何让 MSBuild 仅在子树中构建所有解决方案? (我可以对它们进行搜索 - 这是我想编写的一个简单工具)
如何告诉 MSBuild 构建解决方案/vcproj 的所有配置?
我们正在使用 MSBuild、bat 文件、vc2008、c++
最佳答案
作为 PowerShell 的粉丝,以下重新格式化的单行代码可能会有所帮助:
Get-ChildItem -Recurse -Include *.sln |
ForEach-Object {
$Solution = $_.FullName
Get-Content $_ |
ForEach-Object {
if($_ -match '\{[^\}]+[^=]+= ([^\{\s]*)$') {
$matches[1]
}
} | Sort-Object -Unique |
ForEach-Object {
$config = ([string]$_).Split([char]'|')
& "$env:windir\Microsoft.NET\Framework\v3.5\msbuild.exe" $Solution /p:Configuration="$($config[0])" /p:Platform="$($config[1])"
}
}
此脚本可以保存为 ps1 文件或作为函数粘贴到您的配置文件中。解释它的作用:
- 查找当前目录下的所有.sln文件
- 解析 sln 以提取配置和平台值
- 对于每个独特的配置平台组合,使用给定的解决方案调用 msbuild
--编辑:忘记拆分字符串是 PSCX 的一部分, 最好使用 [string] 我希望这有帮助。如果您仍想使用 MsBuild,它确实通过“.\**\*.sln”语法支持文件 glob 运算符的递归形式,请参阅 here了解详情。 MsBuild 还提供了 MsBuild 任务,可用于构建一组解决方案。我不知道如何在 msbuild 中轻松地从解决方案中获取所有“已知”配置。因此我选择了 PowerShell 路线。
关于c++ - 动态确定构建/触发事件的所有解决方案、项目和配置,并使用 MSBuild 从命令行/脚本调用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1025372/