我有一個將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