Russian Qt Forum

Qt => Общие вопросы => Тема начата: Impuls от Ноябрь 29, 2012, 21:36



Название: Области видимости при debug и release в файле проекта
Отправлено: Impuls от Ноябрь 29, 2012, 21:36
Доброго времени суток. Хочу собирать файлы в разных папках при разных режимах сборки. Делаю в *.pro файле так:
Код:
release {                          #Релизная сборка
    PREFIX = ../RELEASE
    POSTFIX = release
} else:debug {                  #Дебаг сборка
    PREFIX = ../DEBUG
    POSTFIX = debug
}
#--------------Операционная система
unix {
    OS = unix
}

win32 {
    OS = win32
}

DESTDIR = $${PREFIX}/$${OS}_bin                                     #Путь к файлам исходников
OBJECTS_DIR = $${PREFIX}/$${TARGET}/$${OS}_obj            #Путь к объектным файлам
MOC_DIR = $${PREFIX}/$${TARGET}/$${OS}_moc                #Путь к moc файлам

Но все равно все собирается в папку RELEASE
Скажите что я делаю не так.
И еще. Скажите, можно ли указать другой каталог для Make файла?

Заранее спасибо


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: kambala от Ноябрь 29, 2012, 23:54
CONFIG(release, debug|release) {
    # означает релизную сборку, для дебаг — условие аналогичное
}


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: Impuls от Ноябрь 30, 2012, 13:55
CONFIG(release, debug|release) {
    # означает релизную сборку, для дебаг — условие аналогичное
}

Это не совсем то. Такое объявление заставит компилятор скомпилировать в дебаг или релиз. А мне нужно определять в какой именно сборке идет компиляция.
Конечно можно задать и так:
Код:
CONFIG(release, debug|release) {#Релизная сборка
    PREFIX = ../RELEASE
    POSTFIX = release
}
CONFIG(debug, debug|release) {#Дебаг сборка
    PREFIX = ../DEBUG
    POSTFIX = debug
}
Тогда сборка идет в двух версиях одновременно, но хотелось бы сделать по человечески))


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: kambala от Ноябрь 30, 2012, 14:14
эта проверка никого не заставляет, а лишь проверяет, в каком режиме ведётся сборка. попробовал бы хоть для начала, прежде, чем писать.


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: Impuls от Ноябрь 30, 2012, 18:04
эта проверка никого не заставляет, а лишь проверяет, в каком режиме ведётся сборка. попробовал бы хоть для начала, прежде, чем писать.

А я и попробовал. У меня создалась и релизная и дебаг сборка. Так что либо, я делаю что-то не так, либо это все же указание.


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: lit-uriy от Ноябрь 30, 2012, 19:26
>У меня создалась и релизная и дебаг сборка.
это означает, что у тебя используется
CONFIG += debug_and_release
CONFIG    += build_all

Обычно, то что тебе надо пишут как и сказал kambala, только используя else
Кусок из реального pro-файла:
Код
Bash
CONFIG (debug, debug|release) {
contains(TEMPLATE, lib){
TARGET = $$qtLibraryTarget($$TARGET)
}else{
TARGET   = $$join(TARGET,,,.d)
}
OBJECTS_DIR = $${TMP_DIR}/debug
# Console added in debug mode
CONFIG   += console
}else{
OBJECTS_DIR = $${TMP_DIR}/release
}
 


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: kambala от Ноябрь 30, 2012, 20:07
debug_and_release — это просто подряд выполняется сборка дебаг и релиз насколько я понял по документации?


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: lit-uriy от Декабрь 01, 2012, 22:06
Документацию не помню :)
По опыту:
debug_and_release заставляет qmake генерировать основной Make-файл содержащий команды (цели) для генерации двух вспомогательных файлов (Make.Release и Make.Debug).
А build_all заставляет по команде make обрабатывать обе цели (Make.Release и Make.Debug)


Название: Re: Области видимости при debug и release в файле проекта
Отправлено: lit-uriy от Декабрь 01, 2012, 22:15
Если нет записи
CONFIG += build_all
то по команде make будет обработана только цепочка фалов:
Make -> Make.Debug

Если нет записи
CONFIG += build_all
но есть
CONFIG += release (или qmake использовался с соответствующим аргументом), то по команде make будет обработана только цепочка фалов:
Make -> Make.Release