2011-09-29 32 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

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