Russian Qt Forum
Ноябрь 02, 2024, 23:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Глобальная переменная в pro-файле  (Прочитано 6430 раз)
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)
Выводит пустую строку.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Январь 20, 2010, 18:15 »

а если её написать до TEMPLATE = subdirs?
Записан

Юра.
enamored
Гость
« Ответ #2 : Январь 20, 2010, 18:18 »

Всё равно не узнает переменную, пробовал.
Записан
crossly
Гость
« Ответ #3 : Январь 20, 2010, 18:22 »

DEFINES .... читайте мануал по qmake
Записан
enamored
Гость
« Ответ #4 : Январь 20, 2010, 20:02 »

Причем здесь DEFINES?
Записан
enamored
Гость
« Ответ #5 : Январь 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.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Январь 20, 2010, 20:46 »

PWD - встроенная (предопределённая) переменная, по этому она везде работает, вобщем-то она и должна везде работать, иначе смысл в ней теряется.
Записан

Юра.
enamored
Гость
« Ответ #7 : Январь 20, 2010, 20:54 »

lit-uriy, вы без сомнения правы.
Структура проекта может быть довольно сложной. И значения переменной PWD в каждом проекте будет своим.
И суть вопроса в том, что нужен способ задать глобальную переменную в одном проекте и предоставить доступ к её значению остальным проектам.
Записан
Dendy
Гость
« Ответ #8 : Январь 20, 2010, 23:29 »

Буду не оригинален: переходите на CMake. Там таких детских проблем нет.
Записан
SABROG
Гость
« Ответ #9 : Январь 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. Т.ч. есть смысл изменить команду на какую-нибудь другую, но чтобы была переносимой.
« Последнее редактирование: Январь 21, 2010, 01:42 от SABROG » Записан
enamored
Гость
« Ответ #10 : Январь 21, 2010, 10:49 »

SABROG, тоже вариант.
Спасибо большое всем за помощь.
Остановился на включении pri-файла в проект.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.227 секунд. Запросов: 22.