6

我正在使用自定义构建步骤将C++ 项目的构建 DLL(即$(TargetPath) )复制到磁盘上的不同位置。

我已将Output自定义构建步骤设置为目标 DLL 路径,并Additional Dependencies设置为$(TargetPath)- 我正在复制的文件,希望 VS 仅在源 DLL 比目标 DLL 更新时才运行该步骤。

但是,每次我构建项目时,VS 都会运行自定义构建步骤 - 所以它似乎无法判断不需要执行复制,(源 DLL $(TargetPath) 没有改变)。我必须错误地配置了步骤。

什么设置会给我我想要的行为(即 - 如果项目构建并且自定义构建步骤成功,VS 认为项目是最新的)?

在 VS 输出窗口中,我看到这一行似乎暗示 Visual Studio 将 vcxproj 作为触发构建步骤的文件。我希望它使用$(TargetPath)

Input file "MyProject.vcxproj" is newer than output file "c:\custom\build\step\copies\the\dll\here.dll".

(PS:我应该补充一下,我最初使用的是Post Build Step,但是如果失败了,VS认为该项目已成功构建,并且在您第二次构建时不会再次运行它)

4

2 回答 2

0

我认为你想要的是增量建筑。

这是一个快速的操作方法:http: //msdn.microsoft.com/en-us/library/ms171483.aspx

基础知识是您需要向目标提供输入,以便 MSBuild 可以将输入映射到输出并在输出与输入更新/相同时跳过目标。

于 2013-10-18T17:19:35.953 回答
0

确保您指定的输出文件的时间戳在复制命令之后更新(在 Unix 中您将使用 touch 命令)。

您可以在命令行中使用它:

cd c:\custom\build\step\copies\the\dll <br>
copy /b /y YOUR_SOURCE_DIRECTORY/here.dll .<br>
copy /b /y here.dll+,,
于 2015-03-20T13:13:51.737 回答