Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: Igors от Октябрь 17, 2012, 00:56



Название: MSVC debug <-> release [решено]
Отправлено: Igors от Октябрь 17, 2012, 00:56
Добрый день

Есть проект, большой, компилится на MSVC минут 40-50. Беда в том что я не могу быстро получать debug/release, То есть вот откомпилил я в debug, погонял, вроде все гуд. Ставлю release, компилю, запускаю, оба-на
Цитировать
vector iterator is out of range
Ну и вообще все STL развалено. Приходится делать "rebuild", тогда все компилится и работает (в рамках MSVC). Но это почти час  :'( Наоборот (из release в debug) - то же самое. На меньших проектах этой беды нет. Кто сталкивался - как порешать?

Спасибо


Название: Re: MSVC debug <-> release
Отправлено: xokc от Октябрь 17, 2012, 08:48
Возможно сейчас у Вас build каталоги для debug и release одинаковые и ошибка при простом build при переходе от debug к release связана с тем, что линковщик пытается слинковать debug объектные файлы с релизными. При rebuild всё пересобирается заново и ошибка пропадает.
В свойствах проекта нужно сравнить значения "Configuraton properties\General\Intermediate directory". Они должны быть разными для release и debug.


Название: Re: MSVC debug <-> release
Отправлено: lesav от Октябрь 17, 2012, 10:44
Добавить в .pro после объявления TARGET, TEMPLATE , CONFIG, DESTDIR
Код:
TARGET = MyProg
DESTDIR = $$_PRO_FILE_PWD_/../_dest_dir
TEMPLATE = app
#TEMPLATE = lib
#CONFIG += plugin
#===============================
ROOTMYPROJ= $$_PRO_FILE_PWD_

PLATFORM = X3
win32 : PLATFORM = win32
unix   : PLATFORM = unix

# Детектор компилятора
contains( MAKEFILE_GENERATOR, MSVC.NET|MSBUILD ): { # build msvc
   #message("=== msvc build detected!")
   MY_TOOLCHANE = $$sprintf('qt%1_msvc', $$QT_VERSION)
} else: {
   contains( MAKEFILE_GENERATOR, MINGW ): {         # build mingw
       #message("=== mingw build detected!")
       MY_TOOLCHANE = $$sprintf('qt%1_mingw', $$QT_VERSION)
   } else: {
       #message("=== GCC build detected!")
       MY_TOOLCHANE = $$sprintf('qt%1_g++', $$QT_VERSION)
   }
}

# Создание директорий
RCC_DIR      = $$sprintf('$$ROOTMYPROJ/tmp/%1/%2/%3/rcc', $$PLATFORM, $$MY_TOOLCHANE,   $$TARGET)
MOC_DIR      = $$sprintf('$$ROOTMYPROJ/tmp/%1/%2/%3/moc', $$PLATFORM, $$MY_TOOLCHANE,   $$TARGET)
UI_DIR       = $$sprintf('$$ROOTMYPROJ/tmp/%1/%2/%3/_ui', $$PLATFORM, $$MY_TOOLCHANE,   $$TARGET)

# И обязательно различые директории для объектных файлов
CONFIG(debug, debug|release):{
   OBJECTS_DIR = $$sprintf('$$ROOTMYPROJ/tmp/%1/%2/%3/objd', $$PLATFORM, $$MY_TOOLCHANE,   $$TARGET)
   # Добавить префикс d
   TARGET = $$sprintf('%1d', $$TARGET)
}else:{
   OBJECTS_DIR = $$sprintf('$$ROOTMYPROJ/tmp/%1/%2/%3/objr', $$PLATFORM, $$MY_TOOLCHANE,   $$TARGET)
}

# на всякий случай
TARGET=$$TARGET

# и не лениться отлаживать выводом сообщений
message(DESTDIR = $$DESTDIR)
message(DESTDIR = $$OBJECTS_DIR)
message(TARGET  = $$TARGET)


Название: Re: MSVC debug <-> release
Отправлено: Igors от Октябрь 17, 2012, 11:10
Возможно сейчас у Вас build каталоги для debug и release одинаковые
Разные, более того я это проверял "живьем": удалил все obj из debug каталога и запустил - debug каталог заполнился заново, а в release каталоге ничего не изменилось

Добавить в .pro после объявления TARGET, TEMPLATE , CONFIG, DESTDIR
Проект не использует Qt. нет pro файла. Можно в терминах (злополучного) MSVC (2008)?
Спасибо


Название: Re: MSVC debug <-> release
Отправлено: lesav от Октябрь 17, 2012, 11:56
Могу только посоветовать заменить физически nmake.exe на jom.exe

Скорость сборки уменьшиться с 40 минут до времени "одного перекура".


Название: Re: MSVC debug <-> release
Отправлено: vregess от Октябрь 17, 2012, 18:07
Разные, более того я это проверял "живьем": удалил все obj из debug каталога и запустил - debug каталог заполнился заново, а в release каталоге ничего не изменилось
А наоборот проверял?


Название: Re: MSVC debug <-> release
Отправлено: Igors от Октябрь 17, 2012, 18:18
В общем прошелся по всем директориям в проекте и тупо установил "Debug" и "Release" для конфигураций соответственно. А то там имена были длинные и задроченные - хотя нигде не нашел чтобы неправильные. После этого - побычила  :) Почему - хз, но работает как положено, переключаться могу. Ну конечно линкует задумчиво, но это минут 8 - не час!

Спасибо принявшим участие в обсуждении