指定自訂建置步驟
更新:2007 年 11 月
「自訂建置步驟」可以為建置系統提供從某一輸入檔建置輸出檔的所需資訊。自訂建置步驟會附加於它的輸入檔,包含要執行的命令、由這些命令產生的輸出檔清單,以及 (選擇性的) 命令描述。
如需有關自訂建置步驟的一般資訊,請參閱瞭解自訂建置步驟和建置事件。
若要指定自訂建置步驟
開啟專案的 [屬性頁] 對話方塊。如需詳細資訊,請參閱設定 Visual C++ 專案屬性。
在 [組態] 方塊中,選取您要指定自訂建置步驟的組態。
在 [方案總管] 中,選取自訂建置步驟的輸入檔。
如果 [自訂建置步驟] 資料夾沒有出現,表示您所選取的檔案已有關聯的預設步驟。例如,.c 和 .cpp 檔案具有叫用 (Invoke) 編譯器的預設步驟。若要覆寫預設的設定,請修改 [組態設定] 資料夾中的 Tool 屬性。
指定與自訂建置步驟關聯的屬性:
在 [其他相依性] 中,指定除了正在定義其自訂建置步驟以外的其他任何檔案 (與自訂建置步驟相關聯的檔案會隱含視為該步驟的輸入)。自訂建置步驟不一定要擁有其他輸入檔。如果您有一個以上其他輸入,請以分號分隔它們。
如果 [其他相依性] 檔案的日期比輸入檔晚,就會執行自訂建置規則。如果所有 [其他相依性] 檔案的日期都比輸入檔早,而且 [輸出] 檔也比輸入檔早,那麼自訂建置步驟就不會執行。
例如,假設您有一個自訂建置步驟輸入時會使用 MyInput.x 而且會產生 MyInput.cpp,同時 MyInput.x 包含一個標頭檔 MyHeader.h。那麼,您可以指定 MyHeader.h 做為 MyInput.x 的輸入相依性,如此一來,當 MyInput.cpp 對於 MyInput.x 或 MyHeader.h 已變為過時的時候,建置系統便會建置它。
輸入相依性也可以確保自訂建置步驟可以按照您所需的順序執行。在前面的範例中,假設 MyHeader.h 是某一個自訂建置步驟的實際輸出。由於 MyHeader.h 相依於 MyInput.x,所以建置系統會先建置 Myheader.h,然後才會在 MyInput.x 上執行自訂建置步驟。
在 [命令列] 中,指定自訂建置規則的語法。這個語法可以包括命令列或 .bat 檔案中合法的任何命令。在多重選取的情況下,您可以使用建置命令和屬性的巨集指定檔案的位置或取得輸入檔的實際名稱。批次檔名稱前面應該加上 call 以確保所有的後續命令都會被執行。
在 [描述] 裡,輸入自訂建置步驟的描述。當建置系統處理這個步驟時,這個描述將會顯示在 [輸出] 視窗中。
在 [輸出] 裡,指定輸出檔的名稱。這是個必要項;如果沒有這個屬性的值,自訂建置步驟將不會執行。如果自訂建置步驟有一個以上輸出,請以分號分隔這些檔名。
輸出檔的名稱應該為 [命令列] 屬性中指定的名稱。專案建置系統將會尋找這個檔案並且檢查它的日期。如果這個檔案比輸入檔更新,或者找不到這個檔案,那麼自訂建置步驟便會執行。如果所有 [其他相依性] 檔案的日期都比輸入檔早,而且 [輸出] 檔也比輸入檔早,那麼自訂建置步驟就不會執行。
如果您希望建置系統在自訂建置步驟所產生的某個輸出檔上運作,必須以手動方式將它將入到專案。自訂建置步驟在建置過程中將會更新這個檔案。
範例
假設您想要在專案中包括一個名為 parser.l 的檔案,您想要由語彙分析 (Lexical Analyzer) 來處理 parser.l,以產生一個主檔名 (Base Name) 相同的 .c 檔 (parser.c)。
首先,您應該將 parser.l 和 parser.c 加入到專案。如果這些檔案還不存在,您只需將這些檔案的參考加入。接著,為 parser.l 建立自訂建置步驟並且在 [命令] 屬性中輸入下列內容:
lexer $(InputPath) .\$(InputName).c
這個命令將會在 parser.l 上執行語彙分析並且輸出 parser.c 到專案目錄。
在 [Outputs] 屬性中,輸入下列:
.\$(InputName).c
當您建置專案時,建置系統會比較 parser.l 與 parser.c 的時間戳記。如果 parser.l 比較新,或者 parser.c 不存在,建置系統便會執行 [命令] 屬性讓 parser.c 成為目前最新的。因為 parser.c 也已經加入到專案,所以建置系統接下來便會繼續進行編譯 parser.c。