2011-03-31 92 views
1

正如我們所知,Build編譯所有使用的單元,編譯編譯僅更改使用的單元。但是,當您使用ifdefs並需要多次更改時,您必須多次構建該項目。 如果你有很多庫,你知道這個IFDEF不會改變行爲,沒有理由再次建立這個庫。使用OTA修改設置文件

我想要做的發現是一種對IDE說某些文件已更改並調用編譯而不是生成的方式。

如何獲取單位和我知道的其他人,但有些知道如何將單位設置爲已修改?

韓國社交協會


找不到爲什麼解決我的問題呢。我發現了一種將其設置爲已修改的方法,問題在於它不會強制IDE按照我的設想構建它。 有人知道對檔案進行什麼樣的檢查才能發送進行編譯?

+1

+1;好問題。 – 2011-03-31 19:29:42

+0

您是否嘗試更改(「觸摸」)磁盤上的文件日期時間? – 2011-04-05 15:35:38

+0

是的,我喜歡。如果我最小化IDE並在最大化IDE後詢問文件是否被修改並詢問是否要重新打開它,會發生什麼情況。如果我說我想,在下次編譯時,這些單元將被重新編譯。但是,如果我沒有這樣做,這是行不通的:/任何想法讓我知道,我測試並在這裏張貼結果。 Tks – 2011-04-05 19:38:03

回答

0

以更簡單的方式解決。我剛剛刪除了文件的DCU並確定,它會再次編譯它。 :D http://paste.ideaslabs.com/show/KCB9cq2Z8c

+0

更好的解決方案,我想。如果DCu不存在,則時間戳不再重要。您也可以將DCU文件恢復到去年。 :-) – 2011-04-08 18:53:33

0

讓我們假設你想要的是標記修改的編輯器緩衝區。假設有一個編輯器緩衝區可以修改,在大多數情況下,對於項目中的大多數項目來說,這是不存在的。讓我們假設你始終打開項目中的每個文件,然後也許你可以用這種方式調整這些打開的單元。

我的想法是,您實際上不僅需要標記修改的編輯器緩衝區,而且還需要接觸由於#define更改而需要重建的磁盤上的所有文件。

要知道哪些文件受到影響,您需要閱讀所有文件。我認爲,你一次又一次地可靠地做這件事的可能性,比做一件建築材料的速度要快很多。

但是,如果您確實決定採用它,則不僅需要修改緩衝區已修改標誌,還需要修改當前項目組中的任何其他文件,或者包含在搜索或庫路徑中的文件夾,找到任何可能受到影響的文件。

您可以看到,也許這比您第一次想到的要複雜。

而且,就OTA而言,這裏是IOTAEditor屬性,Modified,它是隻讀的。

的OTA不希望你改變它:

IOTAEditor = interface(IUnknown) 
    ['{F17A7BD0-E07D-11D1-AB0B-00C04FB16FB3}'] 
    ... 
    function GetModified: Boolean; 
    .. 
    property Modified: Boolean read GetModified; 
    .. 
    end; 

但你實際上可以修改緩衝區內容本身,這將設置標誌。

使用IOTAEditorContent,獲取內容(IStream),修改它(添加空格),然後再次修改它(刪除空格)。現在你已經設置了髒位(爲了運氣,調用GetModified)。

我發現從JCL JclStackTraceViewerStackCodeUtils.pas一些示例代碼,展示瞭如何使用閱讀編輯內容IOTAEditorContent:

​​3210

後重新閱讀你的問題,在我看來,你只是想紀念打開的編輯器緩衝區全部改變,然後進行編譯,以提高速度。所以你可能想要做到這一點:拿上面的代碼,使用Supports()獲取IOTAEditorContent,並調整每一個。

更新:簡短和甜美的版本:修改緩衝區是不夠的。另外,您不需要爲需要更改的文件設置緩衝區,再加上觸摸磁盤上的文件不會達到您想要的效果。所以不,你不能做你想做的事。即使您可以以某種方式修改編譯器對Make-style依賴性和修改檢查的功能,您可能會在IDE中導致很多問題。

+0

Tks,我會明天測試併發布結果。 – 2011-03-31 21:46:32

+0

那麼,Saci有什麼結果? – 2011-04-07 21:22:18

+0

沃倫P,關於你的回答'OTA不希望你改變它:',我找到了一個替代方案。在IOTAModule70接口上,我可以將存檔設置爲修改而沒有問題,我不需要任何緩衝區。這裏是我使用它的代碼http://paste.ideaslabs.com/show/4zoAGrEx3h,如果你想看看所有的代碼讓我知道我發佈在這裏。 好的,但是,將其設置爲已修改並不足以完成我想要的功能,但我會盡其所能。 – 2011-04-08 12:43:57

-1

在IOTAModule70 =接口(IOTAModule50)我會找到MarkModified: 說明: {MarkModifed將標誌着該模塊爲「修改」實際上不表明 爲什麼被它修飾(這將導致內部文件日期保持不變)。 這強制IDE要求保存此模塊,當用戶嘗試 關閉它。它還將清除新的未命名模塊的「可丟棄性」,例如選擇文件|新建|應用程序時。 }

+0

-1,仔細閱讀[@Warren答案](http://stackoverflow.com/questions/5504574/set-file-as-modified-using-ota/5505491#5505491)。這隻有在編輯器緩衝區標記爲已修改時纔有效。 – jachguate 2011-04-05 15:29:02

+0

在我的情況下,我想更改我的文件,這些ifdefs是詳細信息。 – 2011-04-05 19:14:12

+0

其他的事情,無法改變上面的評論。 你測試過了嗎? 肯定是無效的,我可以設置修改沒有由我的IDE打開單位。檢查代碼並製作你的睾丸。 http://paste.ideaslabs.com/show/4zoAGrEx3h – 2011-04-05 19:21:29