我正在使用自定义构建步骤将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会认为项目已成功构建,并且在第二次构建时不再运行它)
答案 0 :(得分:0)
我认为你想要的是增量建筑。
以下是关于它的快速说明:http://msdn.microsoft.com/en-us/library/ms171483.aspx
基础是您需要向目标提供输入,以便MSBuild可以将输入映射到输出,如果输出与输入相比更新/相同年龄,则跳过目标。
答案 1 :(得分: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+,,