Возможно ли использовать предварительно скомпилированные заголовки с файлами 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,

Другие вопросы по тегам