2011-09-29 44 views
0

我有一个将POST DLL复制到目录A的DLL POST_BUILD步骤。假设我然后从目录A中删除该文件。然后在Visual Studio中打开F5,并且不复制文件。根据文件依赖性执行POST_BUILD命令

我在这里有什么选择?我该如何指定每次链接DLL时以及当目录A中的文件过期(或缺失)时都必须执行一组操作?

编辑:这是一个非托管的C++项目,只有.vcproj文件,由CMake生成。因此,编辑.vcproj在我的工作流程中并不实用。

回答

1

仅当msbuild确定需要重建项目时才会执行后构建命令。它不知道你的项目对该文件有依赖性,因为它不解析后期构建命令,这是不实际的。

到目前为止,最简单的解决方案是不删除该文件,没有什么意义。另一种做法是让msbuild变得更聪明,就是将文件添加到你的项目中。使用项目+添加现有项目。设置生成操作=内容,复制到输出目录=复制如果更新。它当然阻碍了你的项目树。

+0

我即使在CMake语法的范围内这是不可能的,我们也不得不接受这个答案。 – bgoodr

1

汉斯的方法也不错。

与使用IDE挂钩相比,您最好直接编辑项目,因为msbuild提供了一套完成您想要的任务的完整任务。

如果编辑的.csproj文件(右键 - >卸载项目 - >编辑),并添加一个生成后步骤,你会得到脏复制行为你想:

<Target Name="AfterBuild"> 
    <ItemGroup> 
    <BuildArtifacts Include="MyDll.dll"/> 
    <FileWrites Include="$(DestDir)\*.*" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(BuildArtifacts)" DestinationFiles="->'$(DestDir)\%(Filename)%(Extension)'" /> 
</Target> 
+0

澄清:这是一个非托管的C++项目,只有CMake生成的.vcproj文件。因此,编辑.vcproj在我的工作流程中并不实用。我将编辑问题陈述以表明正在使用CMake。 – bgoodr

+0

好的。很高兴知道。很奇怪,但很高兴知道。 –