2012-09-22 71 views
5

我使用YACC和lex與Visual Studio 2012 C/CLI,並已創建了yacc源文件中的定義生成步驟如圖圖像下面當源文件未被更改時,爲什麼Visual Studio 2012運行自定義生成步驟?

Custom Build Property Page

有兩個依賴輸出文件。它們是yacc源文件icl5kyacc.y和yyparse.c模板文件。每次構建解決方案時,即使未修改yyparse.c和icl5kyacc.y源文件,定製構建步驟也會運行。這是構建之後的目錄列表。

21-Sep-2012 10:19:18p   28,210 A icl5kyacc.y 
    17-Sep-2012 7:32:06p   9,042 A yyparse.c 
    22-Sep-2012 11:43:56a   38,233 A ICL5KYACC.cpp 
    22-Sep-2012 11:43:56a   2,160 A icl5kyacc.h 

而且從icl5kyacc.y

21-Sep-2012 10:19:18p   28,210 A icl5kyacc.y 
    17-Sep-2012 7:32:06p   9,042 A yyparse.c 
    22-Sep-2012 11:45:46a   38,233 A ICL5KYACC.cpp 
    22-Sep-2012 11:45:46a   2,160 A icl5kyacc.h 

難道我相信在使用自定義生成步驟應該自動適用標準的相關性規則誤再次

2號樓>生成icl5kyacc.cpp後在構建步驟的輸入和輸出文件之間?我很好奇的一件事是工作室根據附加依賴關係爲我提供的宏(%(AdditionalInputs))。不知道那是什麼,或者它是否指向正在修改的文件。

+0

刪除**%(AdditionalInputs)**宏對此問題沒有影響。 – JonN

回答

3

問題是%(目錄)是從解決方案的父級到項目目錄「ICL5K \ ICL5K \」的相對路徑,並且在構建期間當前目錄已經是項目目錄。因此,在C:\ ICL5K \ ICL5K \ ICL5K \ ICL5K中尋找yyparse.c依賴。我應該使用$(ProjectDir),它是包含驅動器說明符「C:\ ICL5K \ ICL5K \」的根目錄中的完整路徑。但更好的是要認識到,所有的輸入和輸出文件都在項目目錄中,並且已經是當前的默認目錄,並刪除所有目錄宏,如下所示: image here 此外,沒有必要指定icl5kyacc.y作爲因爲自定義構建步驟是icl5kyacc.y的一個屬性,所以它已經作爲依賴包含在文件中。

3

您確定您的輸出文件實際上位於您指定的位置嗎?

查看您的列表,您的輸入列在%(Directory)yyparse.c(這也應該包括.y文件)。您的輸出不應該位於%(Directory)icl5kyacc.h%(Directory)ICL5KYACC.cpp之間,看到您的商家信息似乎表明他們在同一個目錄中。

如果找不到輸出文件或者輸出文件比輸入文件舊,生成任務將重新運行。如果您的路徑對輸出文件不正確,那麼該工具將無法找到它們,並假定構建任務需要再次運行。

+0

您的回答雖然不完全正確,但會導致解決方案。我認爲%(目錄)是從根目錄到項目目錄的完整路徑,這也是構建過程中的當前目錄。 %(目錄)指向項目目錄,但沒有驅動器或引導斜槓「ICL5K \ ICL5K \」,這是不是很有用,因爲它是從解決方案的父級的相對路徑。我想要的是$(ProjectDir),它是「C:\ ICL5K \ ICL5K \」。雖然我發現一個更簡單的解決方案是刪除所有%(目錄)宏,因爲所有文件都在項目目錄&中,並且已經是當前目錄。 – JonN

相關問題