Dependencies 基于文件依赖关系执行POST_生成命令

Dependencies 基于文件依赖关系执行POST_生成命令,dependencies,cmake,post-build,Dependencies,Cmake,Post Build,我有一个DLL POST_BUILD步骤,该步骤将DLL复制到目录a。假设我随后从目录a中删除该文件。然后在Visual Studio中单击F5,该文件不会被复制 我的选择是什么?如何指定每次链接DLL时,以及当目录a中的文件过期(或丢失)时,都必须执行一组操作 编辑:这是一个非托管C++项目,只有.cFug生成的.vcPROJ文件。因此,在我的工作流中编辑.vcproj是不实际的 仅当msbuild确定需要重建项目时,才会执行生成后命令。它不知道您的项目依赖于该文件,因为它不解析生成后命令,这

我有一个DLL POST_BUILD步骤,该步骤将DLL复制到目录a。假设我随后从目录a中删除该文件。然后在Visual Studio中单击F5,该文件不会被复制

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


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

仅当msbuild确定需要重建项目时,才会执行生成后命令。它不知道您的项目依赖于该文件,因为它不解析生成后命令,这是不实际的


到目前为止,最简单的解决方案是不删除该文件,这没有什么意义。另一种方法是将文件添加到项目中,使msbuild更智能。使用Project+添加现有项。设置Build action=Content,Copy to Output Directory=Copy(如果更新)。当然,它确实会阻塞您的项目树。

汉斯的方法也很好

与其使用IDE钩子,不如直接编辑项目,因为msbuild提供了一套完整的任务来完成您想要的任务

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

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


说明:这是一个非托管C++项目,只有.cFug生成的VCPROJ文件。因此,在我的工作流中编辑.vcproj是不实际的。我将编辑问题陈述,以表明正在使用CMake。我必须接受这一点作为答案,即使在CMake语法的范围内这可能是不可能的。