我使用msbuild來構建C++項目,並且想要禁止「構建後事件」。我曾嘗試以下特性,但沒有成功:當使用msbuild時抑制C++的「構建後事件」
/property:PostBuildEvent=
/property:VCPostBuildEventTool=
也不會讓任何區別和後生成事件仍在執行。
有誰知道如何使用msbuild壓制這些(和潛在的其他)事件?
我使用msbuild來構建C++項目,並且想要禁止「構建後事件」。我曾嘗試以下特性,但沒有成功:當使用msbuild時抑制C++的「構建後事件」
/property:PostBuildEvent=
/property:VCPostBuildEventTool=
也不會讓任何區別和後生成事件仍在執行。
有誰知道如何使用msbuild壓制這些(和潛在的其他)事件?
我只是想出瞭如何做到這一點。有兩個步驟:
首先,如果您未使用批處理文件啓動msbuild進程,請創建一個調用msbuild進程的批處理文件。然後在調用msbuild進程之前在批處理文件中添加一個變量。事情是這樣的:
set ISFULLBUILD=True
msbuild TFSBuild.proj >> BuildOutput.txt
然後,你需要修改後生成事件只能做一些事情,如果變量沒有設置,或有錯誤的值:
IF NOT '%ISFULLBUILD%'=='True' copy /y $(TargetFileName) "..\..\..\..\..\..\Binaries\$(ConfigurationName)\"
在這種情況下 - 中TargetFileName(Whatever.dll)只會在從Visual Studio構建時纔會被複制。但是,當您使用新的批處理文件構建時,它不會在IF語句後執行命令。
您是否嘗試將生成事件設置爲空白以外的內容?如果你用一些多餘的東西來覆蓋它,比如「dir」或其他東西,它是否仍然執行原始的構建後步驟?
這不是最優雅的解決方案,但它可能工作。
我試過這個沒有成功。 – Rob 2008-11-05 13:07:55
確認,它看起來像msbuild實際上調用vcbuild不那麼靈活,所以我認爲我卡住了。
如果您可以修改生成後事件,則可以使用環境變量(例如SKIP_POST_BUILD_EVENTS
)來執行此操作。然後可以在調用msbuild
之前設置該環境變量,並在執行任何代碼之前檢查變量是否存在於構建後事件中。
這是一個C++特定的問題,因爲我發現做/ p:PostBuildEvent =禁止後編譯事件罰款的C#項目? – RobV 2010-09-08 13:25:06