根据文件依赖性执行POST_BUILD命令

时间:2011-09-29 16:02:42

标签: dependencies cmake post-build

我有一个DLL POST_BUILD步骤,它将DLL复制到目录A.假设我然后从目录A中删除该文件。然后在Visual Studio中点击F5并且不复制该文件。

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

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

2 个答案:

答案 0 :(得分:1)

post build命令仅在msbuild确定需要重建项目时执行。它不会知道你的项目依赖于该文件,因为它不解析post build命令,这是不切实际的。

到目前为止,最简单的解决方案是不删除该文件,没有什么意义。另一种方法是使msbuild更智能,就是将文件添加到项目中。使用项目+添加现有项目。设置构建操作=内容,复制到输出目录=复制如果更新。它确实堵塞了你的项目树。

答案 1 :(得分:1)

汉斯的做法也很好。

而不是使用IDE挂钩,最好直接编辑项目,因为msbuild提供了一整套完成任务的任务。

如果您编辑.csproj文件(右键单击 - >卸载项目 - >编辑)并添加构建后步骤,您将获得所需的脏复制行为:

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