Visual Studio:如何仅在“必要时”运行自定义构建步骤

6

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

我已将自定义构建步骤的Output设置为目标DLL路径,将Additional Dependencies设置为$(TargetPath)-即我要复制的文件,希望VS只有在源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".
< p >< em > (PS:我要补充一点,起初我使用的是“构建后操作”,但如果此操作失败,则VS会将项目视为成功构建,并且在第二次构建时不会再次运行它)

2个回答

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+,,

0

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

这里有一个快速的教程:http://msdn.microsoft.com/en-us/library/ms171483.aspx

基本原理是你需要提供一个输入到目标,这样MSBuild就可以将输入映射到输出,并在输出较新/同龄时跳过目标。


1
我不这么认为。我在Visual Studio项目中,因此构建目标已经定义为要构建的DLL。 - mackenir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接