Tim*_*sch 5 c++ msbuild visual-studio-2010
我正在研究的C++项目(我从VS2008转换为VS2010)过去常常使用几个vcbuild .rules文件来指定自定义构建规则.这些.rules文件具有CustomBuildRule节点的特定"AdditionalDependencies"属性,该属性指定了在计算目标是否需要重建时应该考虑的文件列表.在VS2010转换期间,这些"AdditionalDependencies"被忠实地转移到相应的.props文件中.
与自定义生成规则关联的.targets文件会将这些添加AdditionalDependencies到节点的Inputs属性中Target.这可确保在依赖项中列出的任何文件不存在的情况下执行目标,但如果其中一个依赖项比目标的输出更新,则不会执行目标.它在逻辑上也不太正确,因为并非所有文件都是实际输入,其中一些是指在目标构建期间可能使用的可执行文件.因此,它们可能会被检入版本控制并且将存在,但是文件的较新版本需要触发受影响目标的重建.
目标节点的MSDN文档显示了一个Condition属性,该属性应该可以满足我的要求,但此属性支持的条件不会超出已经执行的"存在"测试.
是否存在可以使用的条件,它将比较两个文件的时间戳(或理想情况下,当前列出的文件AdditionalDependencies与Target的输出文件的时间戳),从而允许我触发类似make的"重建此目标,如果它是过时的这些依赖"?
请仔细查看目标Output房产:
“MSBuild 可以将输入文件的时间戳与输出文件的时间戳进行比较,并确定是否跳过、构建或部分重建目标。在以下示例中,如果 @(CSFile) 项列表中的任何文件更新于hello.exe 文件,MSBuild 将运行目标;否则将跳过:”
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
<Csc
Sources="@(CSFile)"
OutputAssembly="hello.exe"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
可以在此处找到有关使用 MSBuild 进行增量构建的原始文章和更多信息。
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |