2015-01-05 151 views
0

我有一個單元a.cpp,用於子目錄libA中的多個項目。一些項目正在使用預編譯頭文件,而另一些則沒有。在這種情況下使用預編譯頭項目必須具有行:<stdafx.h>和「stdafx.h」之間的區別

#include "..\stdafx.h" 

明智的詩句是不工作:

#include <stdafx.h> 
未使用PCH必須有行

和項目。

當項目使用PCH或不使用PCH時,爲什麼項目會以不同的方式看到stdafx.h文件?

UPD。

當我更換線#include <stdafx.h>在使用預編譯頭項目#include "..\stdafx.h"我有錯誤

Error 19 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? 

目錄結構在這兩個項目是相同的。

+0

一個不同的解決方案:將a.cpp放入庫或DLL中以供重用。那麼你不需要擔心預編譯頭的差異。 – crashmstr

+0

這可能是解決方案,但我懶惰重新編譯獨立項目中的庫,每次我改變它們。它不是很好:) – vico

+0

將庫或DLL項目添加到其他解決方案並添加依賴項。一旦建立,無需額外的工作!很好。重用的代碼屬於庫或DLL。 – crashmstr

回答

0

<stdafx.h>"stdafx.h"之間沒有(或不應該有任何區別)。唯一明顯的區別是一個項目「看到」當前文件夾中的文件,另一個項目在父文件夾中看到它。該差異由編譯器選項Additional Include Directories控制。其中一個項目有libA,另一個項目沒有。

+0

這兩個項目在Additionl包含目錄中都有行。\ libA \。並且他們倆在這些目錄中都有a.cpp – vico

+0

@vico我錯了。項目需要路徑到'stdafx.h',而不是'libA'。因此,一個項目具有該目錄(可以像'.'或者$(ProjectDir)'或$(SolutionDir)')一樣簡單,另一個沒有它。 – Dialecticus

+0

這兩個項目在「其他包含目錄」中都有相同的行。 – vico