![](/img/trans.png)
[英]What is the difference between “Limited Debugging Information” and “Debug Information” in Delphi XE5 compiling setting
[英]What is the difference between compiling and building in Delphi?
使用Delphi-6有兩個選項:Build和Compile。
我知道當我運行程序時,它只編譯已更改的文件,並將DCU用於那些沒有更改的文件。 當我點擊構建顯然它重建DCU。
我一直在想的是,當我制作一個程序用於發布(更改構建設置,條件變量等)時,我可以編譯,還是必須進行完整構建?
如果我不進行完整構建會發生什么,是否有任何后果?
@Daisetsu,這是構建和編譯之間的區別。
當源代碼可用時, Build會編譯項目中所有已使用的單元。
編譯僅編譯已更改的已使用單位。
根據我個人的經驗,當您更改編譯器的配置時,您必須執行應用程序的構建,以便更改將反映在項目的所有單元中。
什么時候編譯?
編譯器僅在.pas源文件的日期時間戳更改時自動重新編譯單元(1,2)。
對於項目中的其他狀態更改(指令,調試或其他編譯器設置等),編譯器不會自動重新編譯。 那是你需要強制構建的時候。
當.inc或其他包含的($ I)文件更改(3)時,您還需要強制重建,因為它們的日期時間戳未被選中。
總而言之,當除了單位.pas文件之外的任何內容發生更改時,您需要進行構建。
建築中有一些奇怪的情況。 大多數會導致“無法找到單位xxx”錯誤,而它似乎存在
(1)如果Delphi就像FPC那樣,.dcu包含它所依賴的所有dcu的接口部分的CRC。 這可用於檢查是否還需要重新編譯。 例如,由於文件系統操作(移動dcu的約)
(2)對於專家,也看看{$ implicitbuild xx}
(3)與Delphi相反,FPC確實在.inc更改上重建。 FPC項目在內部大量使用.inc文件,這個更改已經存在於Delphi支持之前。 因此,將“define”inc文件復制到任何目錄中的軟件包將無法使用FPC進行編譯,因為它們的大小和CRC通常略有不同。 Indy(10)就是一個很好的例子。
更改設置時應始終構建。
以前編譯的DCU文件可能已使用不同的設置進行編譯,例如編譯器定義。 這可能導致同一項目中的兩個單元使用不同的設置進行編譯。
在准備發布時,你肯定應該做一個完整的版本。
沒有理由不這樣做,Delphi的編譯器足夠快。
為了您自己的理智 ,我強烈建議您始終為可釋放版本進行完整構建。
即使對於不可發布的版本,我也經常進行完整版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.