Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: enamored от Январь 20, 2010, 18:12



Название: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 20, 2010, 18:12
Доброго времени суток всем.

Подскажите как сделать переменную в subdirs-проекте, так чтобы она была известна подпроектам.
Есть проект main.pro
Код:
TEMPLATE = subdirs
SUBDIRS  = src plugins tools
CONFIG += ordered

# Собственно, не знаю как определить эту переменную
ROOTPWD = $$PWD

Хотелось бы пользоваться в подпроектах переменной ROOTPWD.
В проекте src.pro:
Код:
DESTDIR = $$ROOTPWD/bin
message($$ROOTPWD)
Выводит пустую строку.


Название: Re: Глобальная переменная в pro-файле
Отправлено: lit-uriy от Январь 20, 2010, 18:15
а если её написать до TEMPLATE = subdirs?


Название: Re: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 20, 2010, 18:18
Всё равно не узнает переменную, пробовал.


Название: Re: Глобальная переменная в pro-файле
Отправлено: crossly от Январь 20, 2010, 18:22
DEFINES .... читайте мануал по qmake


Название: Re: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 20, 2010, 20:02
Причем здесь DEFINES?


Название: Re: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 20, 2010, 20:09
Есть такой способ:

~/main/main.pro
Код:
TEMPLATE = subdirs
SUBDIRS  = src
CONFIG += ordered

include(config.pri)

message(PWD in main: $$PWD)
message(ROOTPWD in main: $$ROOTPWD)

~/main/src/src.pro
Код:
include(../config.pri)

message(PWD in src: $$PWD)
message(ROOTPWD in src: $$ROOTPWD)

~/main/config.pri
Код:
 ROOTPWD = $$PWD

Вывод будет правильным:
Код:
Выполняется сборка проекта main...
Запускается: /usr/bin/qmake-qt4 /home/enamored/main/main.pro -spec linux-g++ -r CONFIG+=debug
Project MESSAGE: PWD in main: /home/enamored/main
Project MESSAGE: ROOTPWD in main: /home/enamored/main
Reading /home/enamored/main/src/src.pro
Project MESSAGE: PWD in src: /home/enamored/main/src
Project MESSAGE: ROOTPWD in src: /home/enamored/main
Завершено с кодом возврата 0.


Название: Re: Глобальная переменная в pro-файле
Отправлено: lit-uriy от Январь 20, 2010, 20:46
PWD - встроенная (предопределённая) переменная, по этому она везде работает, вобщем-то она и должна везде работать, иначе смысл в ней теряется.


Название: Re: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 20, 2010, 20:54
lit-uriy, вы без сомнения правы.
Структура проекта может быть довольно сложной. И значения переменной PWD в каждом проекте будет своим.
И суть вопроса в том, что нужен способ задать глобальную переменную в одном проекте и предоставить доступ к её значению остальным проектам.


Название: Re: Глобальная переменная в pro-файле
Отправлено: Dendy от Январь 20, 2010, 23:29
Буду не оригинален: переходите на CMake. Там таких детских проблем нет.


Название: Re: Глобальная переменная в pro-файле
Отправлено: SABROG от Январь 21, 2010, 01:27
Может не красиво, но работает:

union.pro
Код:
defineTest(setGlobalVar){
    system($$QMAKE_QMAKE -set $$1 $$2)
}

!build_pass:setGlobalVar(MYVAR, \"Hello, World\")

TEMPLATE = subdirs
SUBDIRS = foo.pro \
    bar.pro

foo.pro, bar.pro
Код:
defineReplace(globalVar){
    return($$system($$QMAKE_QMAKE -query $$1))
}

!build_pass{
    message($$globalVar(MYVAR))
}

...

К сожалению это создат переменную навсегда, т.к. qmake не предусматривает команды обратной -set. Т.ч. есть смысл изменить команду на какую-нибудь другую, но чтобы была переносимой.


Название: Re: Глобальная переменная в pro-файле
Отправлено: enamored от Январь 21, 2010, 10:49
SABROG, тоже вариант.
Спасибо большое всем за помощь.
Остановился на включении pri-файла в проект.