Я унаследовал некоторый код, который сделал что-то вроде этого,
Заголовок: HeaderFile.h
#ifndef HEADERFILE_H
#define HEADERFILE_H
#ifndef HEADERFILE_PCH_H
#include<LibStuff>
#include<LibStuff2>
#include<LibStuff3>
#include<LibStuff4>
#include<LibStuff5>
#endif
#include "FilesInProject"
Class A
{
//Code
};
#endif
Cpp: HeaderFile.cpp
#include "HeaderFile_pch.h" //(1)
#include "HeaderFile.h"
//More code
Я понимаю, для чего предназначен предварительно скомпилированный заголовок и что делает код (вроде). Когда я копирую эти файлы в свой проект, я могу обновить устаревший код, но не влиять на исходный проект, VS2010 блокируется (1)
, VS2010 Сказать, что не может найти этот файл.
Я прошел между двумя проектами и не могу найти никаких различий в настройках.
Чего мне не хватает и почему это нормально PCH
в заголовках, как это вместо того, чтобы фактически переместить их в файл с именем HeaderFile_pch.h
, Это какой-то макрос взлом?
Для начала, нет такого файла как Headerfile_pch.h ни в примерах, которые вы предоставили выше, ни, скорее всего, на вашем локальном fs.
Visual C ++ позволяет определить несколько способов настройки предварительно скомпилированных заголовочных файлов. Наиболее распространенным является включение его для ВСЕХ исходных файлов на уровне конфигурации проекта. В разделе «Свойства конфигурации / C ++ / Предварительно скомпилированные заголовки» выберите «Предварительно скомпилированный заголовок», выберите «Использовать». В том же месте с настройкой «Precompiled Header File» обычно находится «stdafx.h», но это может быть все, что вы выберете. Все файлы получат эту настройку (таким образом, конфигурацию на уровне проекта), КРОМЕ ….
Один файл отвечает за создание файла PCH. Этот файл обычно является файлом stdafx.cpp в вашем проекте, но, опять же, он может быть любым источником, который вы пожелаете. Большинство просто настраивают фиктивный файл cpp, в котором есть одна вещь: #include «myheader.h» (duh). Конфигурирование предварительно скомпилированных заголовков для ЭТОГО ОДНОГО ФАЙЛА, переключитесь с «Use» на «Create». Это гарантирует, что если основной заголовок для PCH выйдет из синхронизации, исходный файл будет перекомпилирован в первую очередь для регенерации файла данных PCH, прежде чем остальные будут запущены.
Единственный атрибут этого, который абсолютно обязателен: заголовок (myheader.h или как вы его называете) должен быть первый включите в любой исходный файл, который вы компилируете, который участвует в использовании pch, включая (надеюсь, очевидно) файл, который вы указали как «генератор» (файл, помеченный как «Создать» в предыдущем абзаце).
Наконец, вы Можно отключите pch для каждого файла отдельно, если это проблема из-за необычных условий в вашей среде сборки (т. е. сторонние заголовки, которые делают глупости).
Существуют и другие способы настройки параметров PCH в Visual Studio, но это далеко самый распространенный.
Других решений пока нет …