2015-01-05 2 views
0

У меня есть единица a.cpp, которая используется в нескольких проектах в подкаталоге libA. Некоторые из проектов используют предварительно скомпилированные заголовки, в то время как другие - не. В этом случае проекты, использующие прекомпилированный заголовок должен иметь строку:Разница между <stdafx.h> и "stdafx.h"

#include <stdafx.h> 

и проекты, которые не используют PCH, должны иметь строку:

#include "..\stdafx.h" 

Мудрый стих не работает.

Почему проект видит файл stdafx.h по-разному, когда проект использует PCH или нет?

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

Оба проекта имеют строку. \ LibA \ in Additionl Include Directories. И у обоих из них есть a.cpp в этих каталогах. – vico

+0

@vico. Я ошибся. Для проектов нужен путь к 'stdafx.h', а не' libA'. Таким образом, один проект имеет этот каталог (может быть таким же простым, как '.', или, может быть,' $ (ProjectDir) 'или' $ (SolutionDir) '), а другой не имеет его. – Dialecticus

+0

Оба проекта имеют одинаковые строки в дополнительных каталогах Include. – vico

Смежные вопросы