Мне надо иметь две .lib для debug и release?

Вопрос о необходимости иметь две .lib файлов для отладочной (debug) и релизной (release) сборок в контексте разработки на языке C++ является довольно распространенным.

Краткий ответ: да, обычно требуется иметь две отдельные .lib файлы для отладочной и релизной сборок.

Причина этого заключается в том, что отладочные и релизные сборки имеют различные цели и требования. Отладочная сборка предоставляет более подробную информацию о коде, позволяющую отслеживать ошибки, проводить отладку и профилирование программы. Релизная сборка, напротив, нацелена на оптимизацию и минимизацию размера исполняемого файла, что обеспечивает более эффективную работу и улучшает производительность программы.

Когда вы компилируете программу в режиме отладки (debug), компилятор добавляет в код дополнительные отладочные информации, такие как символьные имена функций, информацию о переменных, отметки на указателях, информацию о стеке и т.д. Эта информация позволяет отладчику отслеживать выполнение кода и выполнить операцию последовательной отладки.

Однако такие дополнительные данные и функциональность, предоставляемые отладочной сборкой, могут повлечь за собой некоторый негативный эффект на производительность программы, а также увеличить размер исполняемого файла. Поэтому, при выпуске готового продукта, для достижения наилучшей производительности, обычно используется релизная сборка.

Для каждой версии вашей программы (отладочной и релизной) компилятор создает отдельные .lib файлы, содержащие скомпилированный объектный код и другую информацию, необходимую линковщику для связи с исполняемым файлом программы. Разделение .lib файлов помогает линковщику правильно подключать нужные компоненты в зависимости от выбранной сборки (отладочной или релизной).

Поэтому, чтобы успешно сбилдить вашу программу как в режиме отладки, так и в режиме релиза, вам потребуется иметь два отдельных .lib файла - один для отладочной сборки (.lib файл, который собран с опцией отладки), и другой для релизной сборки (.lib файл, скомпилированный без опций отладки).

Это обычная практика в разработке на C++, чтобы иметь отдельные .lib файлы для разных режимов сборки, чтобы упростить сборку и поддержку кода.