Возможно ли использовать предварительно скомпилированные заголовки с файлами MIDL?
У нас есть проект, который использует инструмент MIDL для создания определенных файлов header/iid и прокси. Эти файлы компилируются и связываются с остальной частью проекта с помощью шага после сборки, который вызывает nmake.
Можно ли использовать предварительно скомпилированные заголовки с этими файлами, сгенерированными IDL? Как я могу ввести #include "stdafx-h"
и удалить другие включенные заголовки?
2 ответа
Используйте параметр /FI (Force Include): "Этот параметр имеет тот же эффект, что и указание файла с двойными кавычками в директиве #include в первой строке каждого исходного файла, указанного в командной строке, в переменной среды CL, или в командном файле."
Он не удалит другие заголовки, но это не обязательно для использования предварительно скомпилированного заголовка... Все заголовки, которые вы хотите предварительно скомпилировать, должны быть включены в stdafx.h. Затем, при условии, что файлы имеют защиту включения, это не будет проблемой, когда они снова включены в источники.
пример
Сформирован a.cpp
файл:
#include <a.h>
#include <b.h>
//rest of the code
Предположим, вы хотите предварительно скомпилировать a.h
а также b.h
, Затем вы создаете файл stdafx.h:
#include <a.h>
#include <b.h>
И затем вы используете опцию /FI, чтобы этот stdafx.h был включен в качестве первого файла в a.cpp
, Если файлы a.h
а также b.h
включают охранников, оставляя их в a.cpp
это не проблема...
"stdafx.h" - это просто соглашение. Если вы знаете, что созданные вами исходные файлы всегда имеют стандартный префикс включенных заголовков, вы можете назвать последний из них в /Yu
переключатель (используйте предварительно скомпилированные заголовки). Чтобы создать PCH, создайте один файл.cpp только с этими фиксированными заголовками и скомпилируйте его с помощью /Yc
,