Предварительно скомпилированные заголовки со смешанными C и C++

Я использую предварительно скомпилированные заголовки в своем проекте на C, но мы интегрируем в проект файл .CPP.

Вот ошибка:

Error   1   fatal error C1853: 'Debug\MuffinFactory.pch' precompiled header
file is from a previous version of the compiler, or the precompiled header is C++
 and you are using it from C (or vice versa)    
c:\users\blake\desktop\projects\muffinfactory\source\main.cpp   1

Нам нужен только один .CPP, скомпилированный в нашем проекте, но нам действительно нужен предварительно скомпилированный заголовок, чтобы сократить время компиляции (Windows.h и другие).

Как я должен организовать свой проект, чтобы сделать это?


person James Linden    schedule 19.01.2012    source источник
comment
Можете ли вы скомпилировать C как C++?   -  person Martin Broadhurst    schedule 20.01.2012
comment
Это вряд ли будет последней проблемой, с которой вы столкнетесь, пытаясь скомбинировать вот так. Обычная проблема заключается в попытке вставить несколько .C в проект C++, а не наоборот.   -  person Mark Ransom    schedule 20.01.2012
comment
stdafx.h для новичков — viva64.com/en/b/0265   -  person    schedule 15.07.2014


Ответы (5)


Так что не используйте предварительно скомпилированные заголовки для этого единственного файла!

Будучи файлом .cpp, он в любом случае будет иметь отдельные параметры компиляции.

person Bo Persson    schedule 19.01.2012
comment
пожалуйста, объясните, что вы ответили @ Persson - person Mr. Perfectionist; 24.04.2015
comment
@nafeeur Это было давно, но я полагаю, что идея заключалась в том, что для C и C ++, вероятно, потребуются разные параметры компилятора, поэтому предварительно скомпилированный заголовок в любом случае нельзя было бы использовать для обоих наборов (если бы компилятор его принял). Поэтому просто скомпилируйте один файл CPP отдельно и не используйте для него предварительно скомпилированный заголовок. - person Bo Persson; 25.04.2015

Возможно, вы сможете создать два предварительно скомпилированных заголовка в своем проекте. В каждом исходном файле есть свойство, которое определяет, будет ли он использовать предварительно скомпилированный заголовок или сгенерировать предварительно скомпилированный заголовок — попробуйте настроить два разных источника для создания заголовка.

person Mark Ransom    schedule 19.01.2012
comment
Отличный вариант! Однако требуется небольшая возня с .vcproj. - person James Linden; 20.01.2012
comment
Дополнительная информация: выберите файл .c, который вы не хотите использовать Предварительно скомпилированный заголовок, в обозревателе решений > Щелкните правой кнопкой мыши > В разделе «Предварительно скомпилированные заголовки» выберите «Не использовать предварительно скомпилированный заголовок». - person Zuuum; 19.02.2012
comment
@Zuuum: Спасибо за ответ. - person Rasmi Ranjan Nayak; 20.08.2013

Ответ Зууума

Не использовать предварительно скомпилированные заголовки

Приношу извинения Zuuum за такой вопиющий грабеж его ответа, но 7 лет спустя он все еще похоронен как комментарий. Бо Перрсон говорит нам, что делать

Так что не используйте предварительно скомпилированные заголовки для этого единственного файла!
В любом случае у него будут отдельные параметры компиляции.

и Zuuum рассказывает нам, как

Дополнительная информация: выберите файл, который вы не хотите использовать, «Предварительно скомпилированный заголовок» в обозревателе решений.
Щелкните правой кнопкой мыши
В разделе «Предварительно скомпилированные заголовки» выберите «Не использовать предварительно скомпилированный заголовок»
Zuuum 19 фев. :34

Я сделал крошечные правки - это не прямые кавычки. Причина моего изменения заключается в том, что вы можете захотеть исключить файл C или C++ из использования предварительно скомпилированных заголовков для конкретного случая. Бо предполагает C++, так как это прямой ответ на вопрос. Zuuum предполагает C, и это касается меня и моей иллюстрации. На практике может быть и то, и другое.

Понятно, но раздражает, что расположение параметров в меню меняется от одной версии Visual Studio к другой, но вот расположение пункта меню в моей текущей Visual Studio (2019).

person Ivan    schedule 04.06.2019
comment
Это должен быть принятый ответ, поскольку он четко объясняет, как решить проблему. - person Sembei Norimaki; 05.07.2021

Попробуйте создать отдельный предварительно скомпилированный заголовочный файл C++ (скажем, MuffinFactoryCpp.h, который является копией другого). Посмотрите на настройки проекта в разделе «Предварительно скомпилированные заголовки» и используйте этот новый файл заголовка в качестве предварительно скомпилированного заголовка для исходного файла C++.

person zdan    schedule 19.01.2012

Я только что посмотрел ошибку здесь и нашел эту тему. Однако путем проб и ошибок я обнаружил, что проблема заключалась в том, что в последнее время у меня не были сохранены все файлы. Кажется, что Visual Studio немного придирчива к датам сохранения файлов, которые присоединены друг к другу.

Я нажал Ctrl+S на всех исходных файлах, и это решило проблему.

person Brandon Nolet    schedule 11.08.2015