2016-06-14 113 views
0

我有一個Visual Studio 2010解決方案,其中包含幾個非常密切相關的項目。想脫離複製粘貼代碼共享和共享項目之間的一些共同的類。我們嘗試將項目A中的類的引用添加到項目B中,但是在共享類引用錯誤的stdafx.h文件的情況下正在收到編譯錯誤。請注意,兩個項目都預編譯了標題(默認情況下)。在解決stdafx.h依賴關係時共享項目之間的類

我們還了解到它是使用預處理器定義的not possible to #ifdef the correct stdafx.h文件。

在這一點上,它看起來像我們的選擇是要麼建立一個靜態庫項目或多個項目,並參考來自項目A & B,或嘗試一些預生成事件複製正確的stdafx.h文件到共享代碼子文件夾。第三是重新構建這兩個項目,根本不使用stdafx.h。

所有這些選項對我來說似乎有點矯枉過正。有沒有更容易的解決方案,我錯過了?

+0

我認爲,最好的選擇是用公用代碼創建一個靜態庫,正如您發現的那樣... – Aconcagua

+1

一種解決方案是在預編譯頭文件關閉的情況下編譯。這完全擺脫了stdafx.h。 – user4581301

+1

您是否嘗試過創建新的過濾器並從該過濾器中的其他項目添加類。這可以幫助明確其他項目類的來源,並且可以將stdafx.h添加到該過濾器。 – amisam

回答

1

兩個冒出直衝我的頭當我讀了你的問題是:

  1. 關閉預編譯頭。
  2. 將通用代碼編譯爲共享庫。

在您的實例1中,您可以更快速地提高生產力,但不要從項目中刪除stdafx,因爲這意味着必須通過項目並關閉預編譯頭。只需刪除所有添加的內容,並保留兩個項目的默認設置。已經有一段時間了,因爲我必須這樣做,但是我想我然後會右鍵單擊並單獨編譯每個cpp文件。這會給你編譯單元丟失的頭文件。添加它們,然後沖洗並重復每個。

通過靜態分析運行代碼將突出顯示可加速編譯的內容(正向聲明vs包含等)。

1

當我遇到了這個問題,我的固定它:

  1. 重命名具體到他們的項目(stdafx_prj_A.h,stdafx_prj_B.h等),所有的stdafx.h文件。
    • 此外,您需要更新每個解決方案以使用正確的預編譯頭文件。這個設置在Configuration Properties - > C/C++ - > Precompiled Headers - > Precompiled Header File中。
    • 不要忘記爲所有的配置和平臺設置這一套。
    • 要安全。每個StdAfx.cpp只需要包含正確的頭文件。所以不要在1個StdAfx.cpp文件中包含所有的stdafx頭文件。
  2. 將項目之間共享的任何類移至其自己的項目。

這仍然允許您使用PCH文件,而且您不必擔心編譯器使用錯誤的文件。如果我記得正確,VS會爲您創建的任何新類使用當前指定的PCH文件名。

0

我們創建.cxx文件與原始來源除了#include "stdafx.h"除外。這是實現該類的主要文件。

然後我們創建單獨的項目具體.cpp文件只包含(例如NumEdit.cpp

#include "stdafx.h" 
#include "\pathtoimplementation\NumEdit.cxx" 

然後每個項目的debugrelease文件夾具有該項目的具體.obj文件。