2012-08-29 51 views
3

構建一個基本的C++項目與Visual Studio 2012年當我修改的源文件:的可執行程序絕不重建,但目標文件重新編譯

  • 相應的對象文件被編譯
  • 的.tlog文件編譯更新
  • PDB文件被更新
  • 的.tlog文件鏈接但沒有改變
  • 鏈接聲稱All outputs are up-to-date.並且不建立一個新的可執行文件。

獲取可執行文件的唯一方法是將其刪除。跟蹤系統似乎有些錯誤,我想知道是否有人能夠解釋這個問題。

這裏是MSBuild的輸出我改變兩個文件,完整路徑後和一些其他的東西省略(這個輸出是VS2010工具集,但2012的行爲相同):

1>Target "ClCompile" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets"... 
    Using "CL" task from assembly "Microsoft.Build.CppTasks.Win32, Version=4.0.0.0... 
    Task "CL" 
    Read Tracking Logs: 
    cl.read.1.tlog 
    CL.2520.read.1.tlog 
    ... 
    Outputs for .... 
    XXX.OBJ 
    YYY.OBJ 
    ... 
    xxx.cpp will be compiled as xxx.cpp was modified... 
    yyy.cpp will be compiled as yyy.cpp was modified... 
    Write Tracking Logs: 
    cl.write.1.tlog 
    CL.2520.write.1.tlog 
    ... 
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe .... 
    Tracking command: 
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\Tracker.exe .... 
    xxx.cpp 
    yyy.cpp 
    Done executing task "CL". 
1>Done building target "ClCompile" in project "xxx.vcxproj". 

到目前爲止,一切都很好。現在,鏈接器在踢(當然,事實並非如此):

1>Target "Link" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets".... 
    Using "Link" task from assembly "Microsoft.Build.CppTasks.Win32, Version=4.0.0.0... 
    Task "Link" 
    Using cached output dependency table built from: 
    link.write.1.tlog 
    Using cached input dependency table built from: 
    ink.read.1.tlog 
    Outputs for .... 
    MY.EXE 
    MY.PDB 
    All outputs are up-to-date. 
    Done executing task "Link". 
    Task "Message" 
    xxx.vcxproj -> my.exe 
    Done executing task "Message". 
1>Done building target "Link" in project "xxx.vcxproj". 
+0

有趣的是,我有同樣的問題,但解決方案不適合我。 – Lev

+0

您的中間/輸出目錄設置爲? – stijn

+0

$(IntDir)是$(VmRoot)Temp \ $(ProjectName)\ $(Platform)\ $(Configuration)\,其中$(VmRoot)是開發環境的根,$(VmRoot)Temp不等於到%TMP%或%TEMP%。我目前正在測試這個限制也適用於名爲「Temp」的_all_目錄的子目錄。 – Lev

回答

1

檢查我們在屬性表一個接一個的所有選項後,似乎這個問題的唯一來源是,我們有中間目錄設置爲另一個驅動器上的目錄。我們總是在%TEMP%之外完成源代碼構建,並且大部分時間項目都駐留在另一個驅動器上。

提交了一個錯誤報告here包括簡單的步驟來重現問題。希望這會很快得到解決。目前的解決方案是將IntDir設置爲與項目相同的驅動器。

UPDATE

針對這個問題的錯誤報告被關閉的「設計」:好像中間目錄不應該是%TEMP%或%TMP%或那些的任何子目錄。令人不安,但至少我知道現在出了什麼問題。