2013-10-25 36 views
3

我在C++ VS2010中構建了一個DLL。VS 2010建設不消耗

我已經通過添加「d」來更改DEBUG TargetName的值,因此「TargetName」的定義現在是「$(ProjectName)d」。

所有的構建都很好 - 所有的DEBUG構建文件名都有一個後綴「d」 - 這是因爲調試&版本文件可以存在於一個目錄中(該項目是一大批項目的一小部分)。

但是,當我按F7與一個DEBUG目標時,項目總是建立。例如,讓我說我的項目被稱爲「MyProj」。在RELEASE中,我在DEBUG的「MyProjd.dll」中生成「MyProj.dll」和所有其他文件(MyProj.lib/.exp/.pdb/...)等等。所有這些文件在它們各自目錄,但VS總是建立在F7的DEBUG上。在RELEASE中,VS正確地確定項目是最新的並且什麼都不做。

所以我啓用VS中的調試跟蹤使用<system.diagnostics>在devenv.exe.config中設置CPS = 4並重新啓動VS.使用(sysinternals)DebugView我可以看到DEBUG重建被觸發,因爲VS正在檢查「MyProj.lib」&「MyProj.exp」而不是「MyProjd.lib」&「MyProjd.exp」,即它檢查錯誤文件(不存在),所以構建始終啓動。

這是一個已知問題還是有一些設置來解決這個問題?設置/ IMPLIB根本沒有幫助 - 這似乎是在VS的「make」方面的問題 - 正確的文件總是被建立(如果不必要!),所以這是一個煩惱,而不是一個主要問題...

感謝

尼克

+1

我以前也見過這種行爲。我記得必須做一個「乾淨的」,關閉VS,刪除預編譯的頭文件和輸出文件夾,然後重建所有內容。 – mark

+0

有趣 - 我清理了這個項目,問題沒有了。很奇怪。 FWIW,我根本沒有使用PCH。仍然認爲這是VS依賴檢查中的一個(微小的惱人的)錯誤... – Nicko

+0

我懷疑當你做一個乾淨的時候,VS會清除它的依賴列表。由於我在向TargetName中添加「d」之後沒有做過清理工作,因此VS錯誤地仍然在尋找舊名稱(但僅限於.lib和.exp文件),而不是查看$(TargetName )宏。 做一個「乾淨的」重置依賴項,所以現在一切都很好。我仍然認爲這是一個bug ... – Nicko

回答

0

我以前見過這種行爲也是如此。不知道這是必要的一步,但我的決心:

  • 建設 - >「清理解決方案」
  • 退出Visual Studio的
  • 刪除預編譯的頭文件和輸出文件夾(認爲我刪除了。 sdf)
  • 重建一切