crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> qmake и переменные
SABROG
  опции профиля:
сообщение 3.2.2009, 15:36
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Поправьте меня если я буду не прав, но почитав документацию я узнал следующее.

MyVar = test #определяем свою переменную

DEFINES = $${MyVar}
и
DEFINES = $$MyVar

Синонимы. В данном случае двойной доллар ($$) означает операцию взятия содержимого из переменной на этапе обработки .pro файла (qmake) и запихивания её в DEFINES. В makefile.release или makefile.debug затем можно будет наблюдать такое:

DEFINES       = -Dtest


Есть еще вариант с одинарным долларом:

MyVar = $QTDIR
и
MyVar = $(QTDIR)

Синонимы. Тут одинарный доллар ($) означает заполнение переменной непосредственно при компиляции makefile.release или makefile.debug. Т.е. qmake я мог сделать год назад, а переменную надо брать из окружения (environment) при компиляции.

Отсюда возникает несколько другой вопрос. Ну вот создал я перменную MyVar в .pro файле, присвоил ей некоторое значение. А как эту переменную экспортировать в makefile, таким образом, чтобы в нем получилось нечто такое:

CFLAGS        = -O2 -Wall $(DEFINES)
CXXFLAGS      = -O2 -frtti -fexceptions -mthreads -Wall $(DEFINES)
INSTALL_FILE    = $(COPY_FILE)
INSTALL_PROGRAM = $(COPY_FILE)
INSTALL_DIR     = $(COPY_DIR)
MyVar = $(QTDIR)


Я пытался это сделать. Но переменная туда не попадает вообще никак. Выходит я не могу повлиять на выходящий makefile? Добавить свои команды запуска других утилит, выставлять переменные и т.п. именно на этапе компиляции, а не во время запуска qmake?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.2.2009, 17:22
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 3.2.2009, 18:36) *
DEFINES = $${MyVar}
и
DEFINES = $$MyVar

Синонимы.
Нет Не совсем синонимы:
Цитата
You can also assign the value of a current variable to another variable by prefixing $$ to the variable name. Например:
 MY_DEFINES = $$DEFINES

Now the MY_DEFINES variable contains what is in the DEFINES variable at this point in the project file. This is also equivalent to:
 MY_DEFINES = $${DEFINES}

The second notation allows you to append the contents of the variable to another value without separating the two with a space. For example, the following will ensure that the final executable will be given a name that includes the project template being used:
 TARGET = myproject_$${TEMPLATE}


----
Цитата
Вы, также, можете присвоить значение текущей переменной к другой переменной добавляя префикс $$ к имени переменной. Например:
 MY_DEFINES = $$DEFINES

Теперь переменная MY_DEFINES содержит то, что есть в переменной DEFINES в этой точке проектного файла. это также эквивалентно:
 MY_DEFINES = $${DEFINES}

Вторая форма позволяет вам добовлять содержимое переменной к другому значению без без разделения их пробелом. Например, следующее будет гарантировать, что конечный исполняемый файл будет иметь имя, которое включает используемый тип (шаблон) проекта:
 TARGET = myproject_$${TEMPLATE}


провел небольшой тест
pro-файл
MYVAR = PWD
message(Test-1: $$MYVAR)
MYVAR = $PWD
message(Test-2: $$MYVAR)
MYVAR = $$PWD
message(Test-3: $$MYVAR)

MYVAR = $(PWD)
message(Test-4: $$MYVAR)
MYVAR = $$(PWD)
message(Test-5: $$MYVAR)

MYVAR = ${PWD}
message(Test-6: $$MYVAR)
MYVAR = $${PWD}
message(Test-7: $$MYVAR)

MYVAR = $[PWD]
message(Test-8: $$MYVAR)
MYVAR = $$[PWD]
message(Test-9: $$MYVAR)
находится в каталоге: D:\tempData\Qt-test-5,
вывод в консоль по qmake:
Project MESSAGE: Test-1: PWD
Project MESSAGE: Test-2: $PWD
Project MESSAGE: Test-3: D:/tempData/Qt-test-5
Project MESSAGE: Test-4:
Project MESSAGE: Test-5:
Project MESSAGE: Test-6: ${PWD}
Project MESSAGE: Test-7: D:/tempData/Qt-test-5
Project MESSAGE: Test-8: $[PWD]
Project MESSAGE: Test-9:


Цитата(SABROG @ 3.2.2009, 18:36) *
Я пытался это сделать. Но переменная туда не попадает вообще никак.


Вот пример:
pro-файл

DESTDIR = $(QTDIR)

make.debug

DESTDIR = $(QTDIR)\ #avoid trailing-slash linebreak
TARGET = tstd.exe
DESTDIR_TARGET = $(QTDIR)\tstd.exe


однако запись:
DESTDIR = $(PUPKIN)
игнорируется, т.к. такой переменной окружения нет, подробности надо искать в исходниках qmake
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.2.2009, 17:37
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


интересна такая штука что MVS 6.0 и 3версия Qt автоматически в Makefile подставляет переменные среды
фрагмент:
...
MOC        =    $(QTDIR)\bin\moc.exe
UIC        =    $(QTDIR)\bin\uic.exe
QMAKE        =    qmake
IDC        =    $(QTDIR)\bin\idc.exe
...


4версия и MinGW разворачивают значения переменных

...
QMAKE         = c:\Qt\4.4.3\bin\qmake.exe
IDC           = c:\Qt\4.4.3\bin\idc.exe
...

во как.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.2.2009, 17:57
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 3.2.2009, 17:22) *
Нет Не совсем синонимы:

Так синонимы и получаются. Посмотри на результаты 3 и 7, они идентичны. А то, что добавляются, так они и так добавляются, вот тест:

MyVar = test
MyVar2 = myvar2_$$MyVar
MyVar3 = myvar3_$${MyVar}
message($$MyVar2)
message($$MyVar3)


Project MESSAGE: myvar2_test
Project MESSAGE: myvar3_test


Результат PWD с фигурными скобками понятно почему, т.к. PWD это не переменная qmake. А вот в круглых скобках правильный, т.к. они говорят взять переменную из окружения. Кстати в win2000 нет переменной PWD. С квадратными скобками тоже ясно - в квадратные берутся названия настроек qmake, а среди них нет настройки с именем PWD.

Цитата(Litkevich Yuriy @ 3.2.2009, 17:22) *
однако запись:
DESTDIR = $(PUPKIN)
игнорируется, т.к. такой переменной окружения нет, подробности надо искать в исходниках qmake

В том то и дело, хотелось бы, чтобы эта переменная динамически заводилась в makefile'е с нужным значением.

kwisp, это стандартные ключи makefile'а, которые относятся к компилятору. Просто тролли их позаимстовали, тут нет чуда :)

Сообщение отредактировал SABROG - 3.2.2009, 18:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.2.2009, 18:05
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата
kwisp, это стандартные ключи makefile'а, которые относятся к компилятору. Просто тролли их позаимстовали, тут нет чуда :)


понятно что чуда нет. я про то что поразному себя ведет qmake.
а на счет синонимов прав твой аппонент т.к.
MyVar = test
MyVar2 = $$MyVarmyvar2_
MyVar3 = $${MyVar}_myvar3_
message($$MyVar2)
message($$MyVar3)


очевидно что не сработает. скобочки нужны точно для того же что и скобочки в работе с переменными в юниксе. чтобы отделить имя переменной от последующего текста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.2.2009, 18:13
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


В общем я сегодня никого понять не могу.

Как бы там ни было, скобочки никак не исключают того, что две конструкции синонимы. Просто выходит, что лучше сразу привыкать писать в скобочках, чтобы небыло проблем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.2.2009, 18:17
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 3.2.2009, 20:37) *
во как.
В Qt4 переменная QTDIR используется только программаой (сценарием) configure.

Цитата(SABROG @ 3.2.2009, 20:57) *
В том то и дело, хотелось бы, чтобы эта переменная динамически заводилась в makefile'е с нужным значением.
дак заведи ее на своей машине, я все самопальные проверил, работают.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.2.2009, 18:17
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


SABROG,
а говоришь не можешь понять.:)
я как то задумался над схожей задачей хотел чтобы при каждом создании makefile с помощью qmake в дефайны добавлялась версия сборки. по сути обыкновенный счетчик запусков qmake. естественно что бы не ручками её писать каждый раз а чтоб она автоматом инкрементировалась каждый раз. но потом появились задачи поважнее и я не выполнил желаемого:(...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.2.2009, 18:19
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 3.2.2009, 18:17) *
дак заведи ее на своей машине, я все самопальные проверил, работают.


Да я то заведу :) А если возникнет ситуация, когда такую переменную надо заводить динамически, при сборке проекта юзерами программы?

Нет, ну обычно в INSTALL пишут типа пропишите то, сё ручками, если хотите чего-то. До полного автоматизма похоже не довести.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.2.2009, 18:53
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


В общем углубился чуток. Нашел раздел в ассистенте "Customizing Makefile Output". Потом пару ссылок нарыл: одна, вторая

Надо разбираться...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 12:07