2013-09-22 4 views
0

Я использую CMake генерироваться решением для Visual Studio 2010.Visual Studio не перезаписывает выходные библиотеки для различных конфигураций сборки

В своем решении я несколько lib проектов и один exe проекта. Для Debug конфигурации сборки я использую имена выходных как lib1_d.lib, lib2_d.lib и т.д. ...

Для Release конфигурации сборки я использую lib1.lib, lib2.lib ...

благодаря CMake у меня есть одна дополнительная конфигурация сборки я использую - RelWithDebugInfo , Я использую те же выходные имена для этой конфигурации сборки, что и для Release.

Теперь вот проблема:

Предполагая, что все будет очищено.

Я ударил F5 (запуск/запуск отладки) RelWithDebugInfo. Все проекты построены (exe зависит от них), и проект выполняется успешно.

Я переключился на Release и еще раз ударил F5. Все проекты построены и проект успешно завершен. (библиотеки в выходной директории перезаписаны)

Я возвращаюсь обратно к RelWithDebugInfo и ударяю F5. VS быстро проходит и дает All outputs are up-to-date. ... Build succeeded. И НЕ перезаписывает lib файлы в выходном каталоге. Таким образом, приложение вылетает из-за использования библиотек для другой конфигурации сборки.

Эта проблема возникает, как для заказа Release->RelWithDebugInfo и RelWithDebugInfo->Release

я не найти решение, как добавить другой префикс RelWithDebugLibrariesmy SO question

Есть ли способ, чтобы заставить Visual Studio 2010 всегда перезаписывать выходы? Предпочтительно какой-то флаг, который я могу предоставить от CMake.

+0

Вы помещаете более одной конфигурации в одну папку? Как сказал в своем ответе Ханс Пассант, мои файлы Release и RelWithDebInfo находятся в отдельных папках. И это для проектов, созданных CMake. – drescherjm

ответ

1

Система VS-сборки решает эту проблему, используя различные каталоги сборки для разных конфигураций. По умолчанию 32-разрядный вывод Debug поступает в каталог Debug, выход Release переходит в каталог Release, 64-разрядный вывод Debug - в каталог x64 \ Debug и т. Д. Таким образом, разные конфигурации никогда не наступают на выходные файлы друг друга.

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

Выполнение разновидностей строковых выходных имен файлов становится нецелесообразным, как только вы проходите мимо двух, рассмотрите VS-путь для этого.

Смежные вопросы