簡體   English   中英

復制 ClCompile/Link 目標以消除以消除 2 通 Msbuild VS2019 插件的最佳方法

[英]Best Way to replicate ClCompile/Link targets to elimiate to eliminate 2 pass Msbuild VS2019 plugin

我正在嘗試消除觸發第二次 MSBuild 傳遞的 Visual Studio 2019 插件。

給定:自定義構建任務從 *.bla 文件創建 *.cpp 模塊的構建流程。 然后將它們與其他 *.cpp 模塊鏈接以創建 EXE。

處理 *.bla 文件所需的信息要求運行生成的 exe。 真正的先有雞還是先有蛋的問題。 當前的解決方案是自定義任務檢測 exe 何時不存在,並創建.bla-> .cpp 任務的存根版本,然后用於允許鏈接器解析符號並創建“存根模式”exe。 當前的 Visual Studio 插件檢測存根的創建時間並在構建過程中觸發第二次運行,因此 bla 處理器可以運行 exe 以提供正確處理 bla 文件所需的數據。 聽起來很有趣吧?

今天我們從 *.bla -> *.cpp -> *.obj 開始,*.bla 項目剛剛合並到 @(ClCompile) 項目列表中。 @(blaItems) -> @(CppBlaItems) 添加到@(ClCompile) 第一輪創建一個 STUB user.exe,然后在第二輪中由“bla”文件任務使用。

所有這些最初都是在 Visual Studio 6.0 天創建的。 然后移植到VS2013和更高版本的VS2019。 插件技術和構建技術已經改進到我相信 MSBUILD 已經足夠成熟,可以淘汰插件了。

但是 MSBUILD 有一個規則,即一個目標只執行一次。

所以我需要創建新的目標來復制.bla-> .cpp->*.obj 上的 ClCompile 和 Link 目標行為

我已經完成了大約 80% 的.targets/ .xml/*.props 三重奏,但不知道復制 ClCompile/Link 的最佳方式。

目前我正在考慮創建新目標 BlaStubCompile BlaStubLink 並導入 ClCompile 和 Link 已導入的文件。 但我不確定這是一個好主意。 這就是我今天要研究的路徑。 以為我會伸出手來看看我是否缺少一些直觀明顯的替代解決方案。

如果可能的話,我會避免復制 Microsoft 提供的 ClCompile 和 Link 目標,因為目標如有更改,恕不另行通知。 此問題的風險很小,但如果您不維護自己的副本,則風險可能為零。

MSBuild 任務文檔的備注部分有以下注釋:

與使用Exec 任務啟動 MSBuild.exe 不同,此任務使用相同的 MSBuild 進程來構建子項目。 可以跳過的已構建目標列表在父構建和子構建之間共享。

一種可能的方法是如果“存根模式”exe 不存在則運行目標,並且目標將使用 Exec 任務在其項目上運行 MSBuild 以構建“存根模式”exe。 因為它是一個單獨的進程,所以已經構建的目標列表不會與父構建共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM