#c #visual-studio-2008
#c #visual-studio-2008
Вопрос:
Внутри решения Visual Studio у меня есть два vcproj, один вызывается kernellib.vcproj
, другой вызывается kernerlibtest.vcproj
. Как вы можете догадаться, последний является проектом модульного тестирования для первого.
Теперь kernellib.vcproj
используется предварительно скомпилированный заголовок, и все медленные WINAPI includes
находятся в stdafx.h
. Это делается для того, чтобы убедиться, что ядро может быстро компилироваться.
Теперь, поскольку kernerlibtest.vcproj
также используется тот же набор включений, я также хочу выполнить этот трюк с ускорением, чтобы kernerlibtest.vcproj
как я могу настроить свой vcproj и файл решения для этого?
Комментарии:
1. Вы будете бороться с C2859, жалуясь на несоответствие между .pch и базой данных программы. Я не думаю, что вы можете заставить это работать.
Ответ №1:
Включить его здесь : Project -> Properties -> Configuration Properties-> C/C -> PreCompiled Headers
. Измените параметр «Не использовать предварительно скомпилированные заголовки» на «Использовать /Yu». (Это то, как это делается в vs2010, надеюсь, должно быть так же и в vs2008)
Комментарии:
1. но это будет относиться к
stdafx.h
inkernerlibtest.vcproj
вместоstdafx.h
inkernerlib.vcproj
, я прав?2. Извините, я неправильно понял ваш вопрос изначально. Я думаю, что stdafx.h будет пересчитан для вашего проекта. Я работаю над большим решением с несколькими проектами, и первое сообщение о сборке src, которое я вижу, — «ClCompile: stdafx.cpp «; Если вы добавили файлы kernellib .h в проект, я думаю, они должны были быть включены в pch.
3. Эй, я думаю, вы можете попробовать несколько / Yc , смотрите: msdn.microsoft.com/en-us/library/z0atkd6c(v=vs.80).aspx . Я думаю, вы можете присвоить другое имя предварительно скомпилированному заголовку kernerlib, а затем включить multiple / Yc, чтобы избежать конфликта, как указано в документации.
Ответ №2:
Есть много способов заставить это работать. Вот мой совет:
- «stdafx.h» (или как бы вы ни называли свой предварительно скомпилированный заголовок) должен быть внутренним заголовком для каждого модуля.
- Вы должны включать только редко изменяющиеся заголовки в stdafx.h, материал, который не сильно меняется.
- Вы должны относиться к этому строго как к оптимизации.
- Включать только stdafx.h из ваших файлов .c / cpp, а не какие-либо общедоступные заголовки.
- Вы все равно должны включать заголовки stdlib / winapi в свои общедоступные заголовки, если ваши заголовки зависят от определений, таких как HWND. Это не замедлит компиляцию вашей библиотеки, потому что вы сначала включаете предварительно скомпилированный заголовок.
- В stdafx.h для kernerlibtest вы даже можете включить kernerlib.h (общедоступный заголовок для зависимости). Вы ничего не получите, если kernerlib.h часто изменяется.
- Это полезно, если вы размещаете большую стороннюю библиотеку внутри своего рабочего дерева.