依赖项更改时 Visual Studio 运行自定义构建工具

Posted

技术标签:

【中文标题】依赖项更改时 Visual Studio 运行自定义构建工具【英文标题】:Visual Studio run custom build tool when dependencies change 【发布时间】:2016-01-19 18:35:55 【问题描述】:

我在 Visual Studio 2013 中有一个包含两个 C++ 项目的解决方案。

项目 A 创建一个静态库。项目 B 为 A 生成 SWIG 生成的 DLL 包装器,链接 A 生成的库。复杂的因素是 B 使用“自定义构建步骤”生成代码,设置为在 ClCompile 之前执行。自定义构建步骤调用外部工具以根据项目 A 的头文件中定义的类生成包装器代码。如果生成成功完成,项目 B 从生成的代码构建一个 DLL,链接到项目 A 中生成的 .lib .

我遇到的问题是 B 中的自定义步骤在每个构建中都会发生(正如人们所期望的那样),但我想在 A 中的头文件发生更改时实现它。我看不到一种定义强制执行此条件的规则的方法。如果我将“..\project A*.h”添加到自定义构建步骤的附加依赖项字段中,则缺少的链接将是一个宏,当附加依赖项中的任何文件比输出字段中的任何文件都新时,该宏的计算结果为 true .

Visual Studio 是否提供一个宏来告诉我自定义构建步骤的附加依赖项何时比输出更新,或者我是否处于脚本领域?

【问题讨论】:

【参考方案1】:

我使用与此类似的自定义构建:

<CustomBuild>
  <Command>swig -c++ -python -I..\include -outdir $(OutDir) %(Identity)</Command>
  <Message>Creating SWIG-generated files...</Message>
  <Outputs>$(ProjectName)_wrap.cxx;$(Outdir)$(ProjectName).py</Outputs>
  <AdditionalInputs>header1.h;header2.h;header3.h</AdditionalInputs>
</CustomBuild>

我没有使用任何额外的东西,所以如果 AdditionalInputs 中的文件比 Outputs 新,Visual Studio 似乎有一个默认规则来运行自定义构建步骤。

【讨论】:

所以 Visual Studio 似乎有一个默认规则,CustomBuild 输入/输出的处理类似于例如编译器输入/输出,因为它们在文件跟踪器机制等中有一个条目。 感谢您的建议。我尝试过使用自定义构建而不是自定义构建步骤(我可以确认 XML 与您上面的示例基本相同),但不幸的是它似乎不起作用。我尝试使用相对路径和绝对路径的每种组合以及带/不带通配符来定义额外的输入,但都没有成功。附加输入文件的时间戳肯定比任何输出都更新。我会在每次让 SWIG 运行生成时都受到打击 - 比在我更改接口并且不强制重建时构建失败要好。

以上是关于依赖项更改时 Visual Studio 运行自定义构建工具的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2022 未加载依赖项

Visual Studio 外部依赖项符号错误

在两个 Visual Studio 实例中使用签名依赖项,一个提升/管理员,一个普通

Visual Studio 自定义安装操作似乎无法正常工作

更新依赖项后,如何让 Visual Studio Code IDE 更新类型?

Visual Studio - 将默认项目依赖项添加到新项目