2009-10-20 6 views
2

У нас есть проект, который использует инструмент MIDL для создания определенных файлов заголовков/iid и прокси. Эти файлы скомпилированы и связаны с остальной частью проекта, используя шаг пост-сборки, который вызывает nmake.Можно использовать предварительно скомпилированные заголовки с файлами, созданными из MIDL?

Можно ли использовать предварительно скомпилированные заголовки с созданными вами файлами IDL? Как я могу ввести #include "stdafx-h" и удалить другие включенные заголовки?

+0

Можете ли вы точно определить, какие файлы создаются вашим средством MIDL, что они включают и как это должно относиться к PCH? – MSalters

ответ

1

Используйте /FI option (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 имеют include guards, оставляя их в a.cpp не проблема ...

+0

Не работает - причина '#include ' заключается в том, чтобы разграничить точку, после которой возобновляется обычная компиляция исходного файла. – MSalters

+0

@MSalters Действительно, нормальная компиляция возобновляется после включения stdafx.h. Но я не вижу проблемы ... Или stdafx.h также включает в себя все остальные файлы, и это не должно быть проблемой, чтобы включить их снова, или это не так, и тогда почему вы хотите удалить оставшиеся файлы? –

+1

@MSalters: обновил мой ответ. –

0

«stdafx.h» это всего лишь условность. Если вы знаете, что исходные файлы, созданные вами, всегда имеют стандартный префикс включенных заголовков, вы можете назвать их последним из коммутатора /Yu (используйте предварительно скомпилированные заголовки). Чтобы создать PCH, создайте один .cpp-файл с такими фиксированными заголовками и скомпилируйте его с помощью /Yc.