如何制作自定义MSBuild目标's的执行依赖于文件's的时间戳
How can I make a custom MSBuild Target's execution dependent on a file's time stamp?
我正在处理的C++项目(我将其从VS2008转换为VS2010)曾经使用几个vcbuild.rules文件来指定自定义生成规则。这些.rules文件具有CustomBuildRule节点的特定"AdditionalDependencies"属性,该属性指定了在确定目标是否需要重建时应考虑的文件列表。在VS2010转换期间,这些"AdditionalDependencies"被忠实地转移到相应的.props文件中。
与自定义生成规则关联的.targets文件确实将这些AdditionalDependencies
添加到Target
节点的Inputs
属性中。这样可以确保在依赖项中列出的任何文件不存在的情况下执行目标,但如果其中一个依赖项比目标的输出更新,则不会执行目标。它在逻辑上也不太正确,因为并非所有文件都是实际输入,其中一些文件引用了可能在目标构建过程中使用的可执行文件。因此,它们可能会被检查到版本控制中并将存在,但文件的较新版本需要触发受影响目标的重建。
Target节点的MSDN文档显示了一个Condition
属性,它应该可以满足我的需求,但该属性支持的条件似乎没有通过已经执行的"Exists"测试。
我是否可以使用一个条件来比较两个文件的时间戳(或者理想情况下,AdditionalDependencies
中当前列出的文件的时间印记与目标的输出文件),从而允许我触发类似"如果这些依赖项过期,则重建此目标"的make?
请仔细查看目标Output
属性:
"MSBuild可以将输入文件的时间戳与输出文件的时间标记进行比较,并确定是跳过、生成还是部分重新生成目标。在以下示例中,如果@(CSFile)项列表中的任何文件比hello.exe文件新,MSBuild将运行目标;否则将跳过:"
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
<Csc
Sources="@(CSFile)"
OutputAssembly="hello.exe"/>
</Target>
可以在此处找到原始文章以及有关MSBuild增量生成的更多信息。
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么内存屏障依赖于变量?
- cmake:构建依赖于非源文件.Qt帮助生成
- 如何找出依赖于LIB文件的DLL列表?
- 提供依赖于输入的程序的文件路径
- 在 NDK 上编译两个带有 gradle 的项目,其中一个依赖于另一个的二进制文件
- 如何从同一个头文件中定义 2 个类,而一个类依赖于另一个类
- 将所有文件依赖于特定目录的依赖
- 依赖于文件输入的c++模板
- 如何检查哪些项目依赖于.cpp文件
- 如何防止源文件依赖于头文件中的包含
- 在 CMake 中将属性(在其中查找包含的目录)注入到依赖于给定标头的文件
- 如何创建一个cmake头文件库,它依赖于外部头文件
- CMake依赖于已定义的(预处理器)头文件
- 如何构建依赖于libcurl的静态可执行文件
- 如何在 Visual Studio 2010 中生成不依赖于 .NET 4 SDK DLL/库文件的可执行文件?
- 如何制作自定义MSBuild目标's的执行依赖于文件's的时间戳
- 如何使用 libumem 查找堆损坏,而不依赖于'core'文件?
- 将依赖项添加到库中,并将它们添加到依赖于该库的二进制文件中
- 如何制作不依赖于 .so 文件的可执行二进制文件