Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
Вопрос: как подружить файлы file.h и file.cpp с обеими проектами?
Пробовал объявлять в stdafx.h #define _STDAFX_H, и в file.cpp писать так:
#ifdef _STDAFX_H
#include stdafx.h
#endif
Но при компиляции в первом проекте с PH возникает ошибка "fatal error C1020: unexpected #endif". Я так понимаю, что это связано именно с тем, что файл stdafx.h не просто заголовочный файл, а precompiled header.
Есть варианты решения проблемы?
Заранее спасибо.
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, ch., Вы писали:
ch.>Коллеги, добрый день.
ch.>Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
ch.>Вопрос: как подружить файлы file.h и file.cpp с обеими проектами?
ch.>Пробовал объявлять в stdafx.h #define _STDAFX_H, и в file.cpp писать так:
ch.>#ifdef _STDAFX_H ch.>#include stdafx.h ch.>#endif
ch.>Но при компиляции в первом проекте с PH возникает ошибка "fatal error C1020: unexpected #endif". Я так понимаю, что это связано именно с тем, что файл stdafx.h не просто заголовочный файл, а precompiled header.
ch.>Есть варианты решения проблемы?
ch.>Заранее спасибо.
включение cpp файлов тоже не запретный плод, создайте дополнительный пустой срр в проекте с precompiled headers, и включите после stdafx.h ващ сорс
Re: Общие файлы в проектах с Precompiled Header и без
В данном случаи похоже, что file.ххх это некоторая "общая библиотечная функциональность", используемая несколькими проектами. Вынеси их в статическую либу и подключай ее в обоих проектах.
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, ch., Вы писали:
ch.>Коллеги, добрый день.
ch.>...
ch.>Пробовал объявлять в stdafx.h #define _STDAFX_H, и в file.cpp писать так:
ch.>#ifdef _STDAFX_H ch.>#include stdafx.h ch.>#endif
ch.>...
ch.>Заранее спасибо.
А точно #ifdef _STDAFX_H ?
Может быть надо #ifndef _STDAFX_H ?
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, ch., Вы писали:
ch.>Коллеги, добрый день.
ch.>Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
ch.>Вопрос: как подружить файлы file.h и file.cpp с обеими проектами?
[...]
ch.>Есть варианты решения проблемы?
1) Вынести file.h и file.cpp в отдельную библиотеку
2) В проект без PH добавить пустой stdafx.h (как обычный файл не PH)
3) Если используется Visual Studio то в проекте с PH для файла file.cpp отключить использование PH (из контекстного меню Properties\C/C++\Precompiled Headers\Create/Use Precompiled Header = "Not Using precompiled header").
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, Pasternak, Вы писали:
P>Здравствуйте, ch., Вы писали:
ch.>>Коллеги, добрый день.
ch.>>Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
ch.>>Вопрос: как подружить файлы file.h и file.cpp с обеими проектами?
P>[...]
ch.>>Есть варианты решения проблемы?
P>1) Вынести file.h и file.cpp в отдельную библиотеку P>2) В проект без PH добавить пустой stdafx.h (как обычный файл не PH) P>3) Если используется Visual Studio то в проекте с PH для файла file.cpp отключить использование PH (из контекстного меню Properties\C/C++\Precompiled Headers\Create/Use Precompiled Header = "Not Using precompiled header").
О! 3-й пункт именно то, что надо! Спасибо огромное.
Re: Общие файлы в проектах с Precompiled Header и без
ch. пишет:
> Есть два файла file.h и file.cpp, которые включены в два разных проекта. > В первом проекте используется Precompiled Header (PH), во втором — нет. > Соответственно в проекте с PH во всех файлах включая file.cpp должен > присутствовать #include stdafx.h, а в проектах где PH не исползуется — > файла stdafx.h нет вообще. > > Вопрос: как подружить файлы file.h и file.cpp с обеими проектами?
Итак, надо подружить файлы file.h и file.cpp.
file.h -- в нём 100% никода не должно быть #include stdafx.h. Т.е. он
уже подружен.
file.cpp -- проблема в том, что в одном проекте там по идеологии должно быть
#include stdafx.h, а в другом проекте его быть не должно.
Решение очень просто -- либо ты делаешь, чтобы в двух проектах оно
должно быть, либо наоборот. Как делать, чтобы оно должно быть,
ты наверное знаешь. А как делать в проекте, где используется PCH,
исходный файл, который не использует PCH -- а вот так (на уровне тыканья мышой в
GUI IDE):
надо открыть конфигурацию проекта, встать НА ЭТОТ КОНКРЕТНЫЙ ФАЙЛ .cpp (или как
его) и в секции Precompiled Headers выбрать пункт Not using precompiled headers.
При этом ВСЕ ОСТАЛЬНЫЕ исходники проекта будут использовать PCH, а этот данный
исходник не будет. Влиять на семантику компиляции это не должно, только на
её скорость. Да, и, естественно, все заголовки, присутствующие в stdafx.h,
и нужные именно для этого исходника, должны быть включены в него, без stdafx.h.
Это тоже не страшно, это кстати должно быть взято за правило для оформления
любого кода.
Ну и на последок стоит сказать, что в любом проекте PCH применять не
обязательно, влиять это будет только на скорость сборки. Ничего, ежели что, --
подождём.
> > #ifdef _STDAFX_H > #include stdafx.h > #endif
это было очень глупо. Ты больше так не делай.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Общие файлы в проектах с Precompiled Header и без
Да, я забыл сказать, в чём самый прикол.
Прикол в том, что AFX — это старое название библиотеки MFC
(Application Framework Extention(или -ded)),
и stdafx.h раньше использовался только в проектах, использующих MFC.
Теперь же, в новых VC, MFC, не MFC, -- им похоже всё равно, но
общий заголовок называется stdafx.h, даже ежели моё приложение
к MFC не имеет никакого отношения.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, MasterZiv, Вы писали:
MZ>надо открыть конфигурацию проекта, встать НА ЭТОТ КОНКРЕТНЫЙ ФАЙЛ .cpp (или как MZ>его) и в секции Precompiled Headers выбрать пункт Not using precompiled headers.
а можно ещё проще, но мало кто знает
можно совсем не включать stdafx.h в cpp файлы, а открыть свойство проекта, пойти в раздел "Configuration Properties" -> "C/C++" -> "Advanced" и в поле "Force Includes" прописать stdafx.h
This option has the same effect as specifying the file with double quotation marks in an #include directive on the first line of every source file specified on the command line, in the CL environment variable, or in a command file. If you use multiple /FI options, files are included in the order they are processed by CL.
Как минимум Visual Studio 2008 это поддерживает.
Re[3]: Общие файлы в проектах с Precompiled Header и без
В>а можно ещё проще, но мало кто знает В>можно совсем не включать stdafx.h в cpp файлы, а открыть свойство проекта, пойти в раздел "Configuration Properties" -> "C/C++" -> "Advanced" и в поле "Force Includes" прописать stdafx.h В>
В>This option has the same effect as specifying the file with double quotation marks in an #include directive on the first line of every source file specified on the command line, in the CL environment variable, or in a command file. If you use multiple /FI options, files are included in the order they are processed by CL.
данный механизм очень хорошо помогает с автоматически генерируемыми файлами Qt moc, когда всё-таки хочется использовать "Precompiled Header" для всего проекта.
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, ch., Вы писали:
ch.>Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
Что-то никто не посоветовал самый простой вариант: в file.cpp не включать stdafx.h вообще, и в проекте использующем PH отключить это самое использование только для file.cpp.
В студии это делается просто: правой кнопкой по нужному файлу -> свойства -> Not Using Precompiled Header
Re[2]: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, vzankin, Вы писали:
V>Здравствуйте, ch., Вы писали:
ch.>>Есть два файла file.h и file.cpp, которые включены в два разных проекта. В первом проекте используется Precompiled Header (PH), во втором — нет. Соответственно в проекте с PH во всех файлах включая file.cpp должен присутствовать #include stdafx.h, а в проектах где PH не исползуется — файла stdafx.h нет вообще.
V>Что-то никто не посоветовал самый простой вариант: в file.cpp не включать stdafx.h вообще, и в проекте использующем PH отключить это самое использование только для file.cpp. V>В студии это делается просто: правой кнопкой по нужному файлу -> свойства -> Not Using Precompiled Header
Уже трижды посоветовали.
Спасибо всем.
Re: Общие файлы в проектах с Precompiled Header и без
Здравствуйте, ch., Вы писали:
ch.>Но при компиляции в первом проекте с PH возникает ошибка "fatal error C1020: unexpected #endif". Я так понимаю, что это связано именно с тем, что файл stdafx.h не просто заголовочный файл, а precompiled header.
Что делать уже не раз посоветовали, хочу лишь обратить внимание на то почему же так происходит.
Дело в том, что при включенных PCH студия полностью игнорирует содержимое файла до строчки с #include "stdafx.h", таким образом её абсолютно пофиг, есть там #ifdef или нет, вот и получается unexpected endif. Хоть стихи пишите до #include "stdafx.h".