2009-02-09 97 views
1

我正在用自己的圖形編輯器開發DSL。這樣的文件有一個.own擴展名。我也有一個將.own文件編譯成.h文件的小工具。在C++項目中使用特定於域的語言文件

X.own - > X.h和X/* H

我寫了一個簡單的.rules文件啓動發電。

我的問題是以下: 我的大部分源代碼文件包括X.h,但在X.own的變化並不意味着產生X.h(或任何其他生成的文件)會有所不同。這由發生器通過使用臨時文件和文件比較來處理。但Visual Studio似乎並不知道如何處理這一切。如果我將「輸出文件」屬性設置爲正確的文件,它總是假定它們將被更改。如果我不這樣做,它會生成它的構建過程,假設它們不會!

我該怎麼做纔好?

1)啓動自定義生成工具

2)計算構建基於依賴

過程

回答

0

jheriko的答案很有趣,因爲它提供了一種啓動自定義工具的方法,然後生成構建依賴關係。但它不是非常有用,因爲你再失去一切可能使用「自定義生成工具」工具包,您可以在其中

  • 選擇始終編譯一些精確的擴展
  • 手動跳過文件自定義生成特定文件在一個特定的項目配置(並可視化這一決定)

有沒有辦法(或至少我沒有找到)「擁有一切」。我發現的唯一方法是在文件更新後讓自定義構建工具返回一個非零數字,並向用戶發送一條消息,解釋它是而不是出錯,並請他再次啓動構建。下一次,定製構建工具再次啓動(不是最優化的,但我使用的工具非常快),但不修改新文件,並且使用有效的依賴關係構建過程繼續。

注意:上述方法不適用於Incredibuild,它似乎忽略了項目構建順序。

1

不要使用自定義生成工具的選項,而是將其設置爲解決一個預生成事件(這可以採用通用命令行,就像自定義構建工具一樣)。這樣MSVS將不會檢查生成的文件。只要它們在解決方案資源管理器中包含或列出,它們就應該編譯得很好,因爲.h文件的生成將在任何其他編譯之前發生。

我發現自定義構建工具並不像通常的構建前和構建後事件那樣有用,因爲它希望生成或修改文件的方式。你可能會發現這個工具對於將來的其他事情很有用(例如爲了在構建之後壓縮.exe,正確地生成其他依賴關係,以確保文件就位等...)

有一個很好的圖表顯示了哪裏在解決方案屬性中找到這些選項here

+0

謝謝,我會研究一下。但我不禁想知道...如果我不使用規則文件,每次添加或重命名時,我都必須修改預生成事件。自己的文件? – 2009-02-09 16:15:53

相關問題