Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Fregloin от Июль 04, 2013, 11:57



Название: qt4/qt5 и pro-файл
Отправлено: Fregloin от Июль 04, 2013, 11:57
Как разделить секции в про файле, которые отностяся к разным версиям qt?

что то типа
Код:
if(qt4)
{
LIBS += using_json_spirit_libs
}
else
if(qt5)
{
LIBS += using_native_libs
}


Название: Re: qt4/qt5 и pro-файл
Отправлено: VPS от Июль 04, 2013, 12:10
Может как-то так:
Код:
greaterThan(QT_MAJOR_VERSION, 4) {
...
} else {
...
}


Название: Re: qt4/qt5 и pro-файл
Отправлено: kambala от Июль 04, 2013, 12:25
для удобства можно ввести свою переменную:
Код:
greaterThan(QT_MAJOR_VERSION, 4): IS_QT5 = 1
...
isEmpty(IS_QT5) {
# Qt 4
}
else {
# Qt 5
}


Название: Re: qt4/qt5 и pro-файл
Отправлено: Fregloin от Июль 04, 2013, 13:35
Сделал так...
Код:
QT  += xml network gui

greaterThan(QT_MAJOR_VERSION, 4)
{
    QT += widgets multimedia
}
lessThan(QT_MAJOR_VERSION, 5):QT += phonon

unix {

greaterThan(QT_MAJOR_VERSION, 4): LIBS += -L$$PWD/../../../build/libs/railcore/debug/ -lrailcore_old
lessThan(QT_MAJOR_VERSION, 5): LIBS +=  -L$$PWD/../../../build/libs/railcore/debug/ -lrailcore_old \
                                        -L$$PWD/../../../build/libs/railcore/release/ -lrailcore_old \
                                        -L/usr/local/lib \
                                        -ljson_spirit \
                                        -lboost_thread
}
с else работать не захотело


Название: Re: qt4/qt5 и pro-файл
Отправлено: kambala от Июль 04, 2013, 14:28
почему бы не вынести LIBS += -L$$PWD/../../../build/libs/railcore/debug/ -lrailcore_old вне условий? и там и там ведь встречается.
с else работать не захотело
написал видно неправильно. кажется else должен начинаться с новой строки.


Название: Re: qt4/qt5 и pro-файл
Отправлено: lesav от Июль 04, 2013, 15:53
написал видно неправильно. кажется else должен начинаться с новой строки.

Так будет работать
Код:
greaterThan(QT_MAJOR_VERSION, 4): {
 # Qt 5
} else: {
 # Qt 4
}

А вот эту строку, использую в каждом проекте
Код:
# Если сборка идет в Qt5 и сборка с GUI добавить модуль widgets
greaterThan(QT_MAJOR_VERSION, 4): contains( QT, gui ): QT += widgets


Название: Re: qt4/qt5 и pro-файл
Отправлено: Alex Custov от Июль 04, 2013, 16:57
с else работать не захотело

открывающая скобка должна быть на той же строке что и условие, а else - на той же, где закрывающая. В самом начале дан рабочий пример.


Название: Re: qt4/qt5 и pro-файл
Отправлено: kambala от Июль 04, 2013, 18:36
Так будет работать
Код:
greaterThan(QT_MAJOR_VERSION, 4): {
 # Qt 5
} else: {
 # Qt 4
}
двоеточие необходимо только если выражение внутри блока условия лишь одно и нету фигурных скобок либо как аналог else if
а else - на той же, где закрывающая
получается у меня неправильный qmake, который позволяет else на новой строке?


Название: Re: qt4/qt5 и pro-файл
Отправлено: lit-uriy от Июль 04, 2013, 21:01
>>а else - на той же, где закрывающая.
имеется ввиду первая закрывашка (перед else).


Название: Re: qt4/qt5 и pro-файл
Отправлено: kambala от Июль 04, 2013, 22:04
нигде прямым текстом не сказано, что else обязан находиться на одной строке с } http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html#scopes-and-conditions говорит только:
Цитировать
You can also provide alternative declarations to those within a scope by using an else scope. Each else scope is processed if the conditions for the preceding scopes are false.
хотя примеры кода указаны именно в виде } else.

qmake вообще хитрая штука. взять хотя бы http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake