MSBuild 在针对不同配置运行时不必要地运行自定义生成工具
MSBuild unnecessarily runs custombuild tool when run for different configurations
我有一个C++项目,我需要对一些头文件运行自定义构建工具,以生成编译此项目时所需的代码。一般来说,我的配置有效。我触发构建,VS/MSBuild 检测输出文件是否为最新,并仅在必要时运行自定义构建工具。
但是,如果生成与同一项目的另一个配置一起运行,则会出现问题。这两种配置都取决于自定义生成工具的输出文件。因此,如果按顺序运行,则只有一个配置应触发自定义生成工具运行。对于哪个配置,构建在第二个自定义构建工具的输出文件已经存在且是最新的。因此,无需再次构建它们。不幸的是,这正是正在发生的事情。由于自定义构建工具需要相当长的时间才能运行,因此这会大大增加构建时间。另一个有趣的方面是,一旦两个配置都运行,我可以再次触发它们中的任何一个,并且不会调用自定义构建工具。
我对文档的期望是触发自定义构建工具:
- 如果指定为输出的任何文件丢失
- 如果我为其指定自定义生成工具的文件的修改晚于指定为输出的任何现有文件的修改时间 如果我指定为
- 附加依赖项的任何文件的修改晚于指定为输出的任何现有文件的修改时间
但所有这些都独立于触发构建的配置。
有没有人知道为什么会发生这种情况?我检查了两种配置的自定义构建工具的设置是否相同。对于这两种配置,输出文件将生成到同一文件夹中。
您所指的文档基本上是正确的,但它省略了其中的所有内容基本上都是每个项目配置/平台的,因为它使用跟踪器.exe这取决于默认情况下进入中间目录的 .tlog 文件。因此,正如您所发现的,让所有配置对 tlog 文件使用相同的位置应该让跟踪器满意,并且只在需要时调用自定义构建工具,与配置/平台无关。我不确定我会推荐任何这些,共享临时对象文件可能会在以后给您带来问题。
处理此问题的另一种方法是添加一个只有一个配置的单独项目,例如"自定义",然后在那里进行自定义构建。然后使当前项目依赖于该项目,并在解决方案的配置管理器中调整所有条目,以便你现在拥有的每个配置都为新项目生成"自定义"配置。
- 使用VS Code和CMake Tools运行自定义命令
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 基于Q3DScatter的自定义图表,QCustom3DItem运行缓慢
- 在 linux 原因上运行自定义原型插件
- 运行自定义可执行文件,QProcess 立即退出,退出代码为 1
- 如何从C++代码运行自定义 GPU tensorflow::op?
- 是否有任何可能的方法将事件(自定义)附加到在运行时创建的对象?[C 构建器]
- CMAKE自定义目标仅运行一次
- 自定义char*插入功能多次运行时会产生运行时错误
- 运行自定义调试器 JAVA
- 在运行时添加自定义Qwidget
- CMake 在构建之前运行自定义命令?
- 仅运行自定义生成规则 - VS2012
- 使用自定义图形层运行专有[Java]应用程序
- 使用自定义AMI运行Amazon EMR
- MSBuild 在针对不同配置运行时不必要地运行自定义生成工具
- 如何在 cocos2d-x 中的另一个线程中运行自定义网络代码
- 在 MFC 应用终止时运行自定义代码:d'tor 还是WM_CLOSE?
- Visual Studio 2010:在单个文件上运行自定义构建工具时指定工作目录
- 如何在QT5中从qmake“进行卸载”期间运行自定义命令