我有一个将POST DLL复制到目录A的DLL POST_BUILD步骤。假设我然后从目录A中删除该文件。然后在Visual Studio中打开F5,并且不复制文件。根据文件依赖性执行POST_BUILD命令
我在这里有什么选择?我该如何指定每次链接DLL时以及当目录A中的文件过期(或缺失)时都必须执行一组操作?
编辑:这是一个非托管的C++项目,只有.vcproj文件,由CMake生成。因此,编辑.vcproj在我的工作流程中并不实用。
我有一个将POST DLL复制到目录A的DLL POST_BUILD步骤。假设我然后从目录A中删除该文件。然后在Visual Studio中打开F5,并且不复制文件。根据文件依赖性执行POST_BUILD命令
我在这里有什么选择?我该如何指定每次链接DLL时以及当目录A中的文件过期(或缺失)时都必须执行一组操作?
编辑:这是一个非托管的C++项目,只有.vcproj文件,由CMake生成。因此,编辑.vcproj在我的工作流程中并不实用。
仅当msbuild确定需要重建项目时才会执行后构建命令。它不知道你的项目对该文件有依赖性,因为它不解析后期构建命令,这是不实际的。
到目前为止,最简单的解决方案是不删除该文件,没有什么意义。另一种做法是让msbuild变得更聪明,就是将文件添加到你的项目中。使用项目+添加现有项目。设置生成操作=内容,复制到输出目录=复制如果更新。它当然阻碍了你的项目树。
汉斯的方法也不错。
与使用IDE挂钩相比,您最好直接编辑项目,因为msbuild提供了一套完成您想要的任务的完整任务。
如果编辑的.csproj文件(右键 - >卸载项目 - >编辑),并添加一个生成后步骤,你会得到脏复制行为你想:
<Target Name="AfterBuild">
<ItemGroup>
<BuildArtifacts Include="MyDll.dll"/>
<FileWrites Include="$(DestDir)\*.*" />
</ItemGroup>
<Copy SourceFiles="@(BuildArtifacts)" DestinationFiles="->'$(DestDir)\%(Filename)%(Extension)'" />
</Target>
澄清:这是一个非托管的C++项目,只有CMake生成的.vcproj文件。因此,编辑.vcproj在我的工作流程中并不实用。我将编辑问题陈述以表明正在使用CMake。 – bgoodr
好的。很高兴知道。很奇怪,但很高兴知道。 –
我即使在CMake语法的范围内这是不可能的,我们也不得不接受这个答案。 – bgoodr