qmake и переменные |
Здравствуйте, гость ( Вход | Регистрация )
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 затем можно будет наблюдать такое:
Есть еще вариант с одинарным долларом: MyVar = $QTDIR и MyVar = $(QTDIR) Синонимы. Тут одинарный доллар ($) означает заполнение переменной непосредственно при компиляции makefile.release или makefile.debug. Т.е. qmake я мог сделать год назад, а переменную надо брать из окружения (environment) при компиляции. Отсюда возникает несколько другой вопрос. Ну вот создал я перменную MyVar в .pro файле, присвоил ей некоторое значение. А как эту переменную экспортировать в makefile, таким образом, чтобы в нем получилось нечто такое:
Я пытался это сделать. Но переменная туда не попадает вообще никак. Выходит я не могу повлиять на выходящий makefile? Добавить свои команды запуска других утилит, выставлять переменные и т.п. именно на этапе компиляции, а не во время запуска qmake? |
|
|
Litkevich Yuriy |
3.2.2009, 17:22
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
DEFINES = $${MyVar} Нет Не совсем синонимы:и DEFINES = $$MyVar Синонимы. Цитата You can also assign the value of a current variable to another variable by prefixing $$ to the variable name. Например:
Now the MY_DEFINES variable contains what is in the DEFINES variable at this point in the project file. This is also equivalent to:
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:
---- Цитата Вы, также, можете присвоить значение текущей переменной к другой переменной добавляя префикс $$ к имени переменной. Например:
Теперь переменная MY_DEFINES содержит то, что есть в переменной DEFINES в этой точке проектного файла. это также эквивалентно:
Вторая форма позволяет вам добовлять содержимое переменной к другому значению без без разделения их пробелом. Например, следующее будет гарантировать, что конечный исполняемый файл будет иметь имя, которое включает используемый тип (шаблон) проекта:
провел небольшой тест pro-файл
вывод в консоль по qmake:
Я пытался это сделать. Но переменная туда не попадает вообще никак. Вот пример: 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 подставляет переменные среды
фрагмент:
4версия и MinGW разворачивают значения переменных
во как. |
|
|
SABROG |
3.2.2009, 17:57
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Нет Не совсем синонимы: Так синонимы и получаются. Посмотри на результаты 3 и 7, они идентичны. А то, что добавляются, так они и так добавляются, вот тест:
Результат PWD с фигурными скобками понятно почему, т.к. PWD это не переменная qmake. А вот в круглых скобках правильный, т.к. они говорят взять переменную из окружения. Кстати в win2000 нет переменной PWD. С квадратными скобками тоже ясно - в квадратные берутся названия настроек qmake, а среди них нет настройки с именем PWD. однако запись: 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. а на счет синонимов прав твой аппонент т.к.
очевидно что не сработает. скобочки нужны точно для того же что и скобочки в работе с переменными в юниксе. чтобы отделить имя переменной от последующего текста. |
|
|
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 |
во как. В Qt4 переменная QTDIR используется только программаой (сценарием) configure.В том то и дело, хотелось бы, чтобы эта переменная динамически заводилась в 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 |
дак заведи ее на своей машине, я все самопальные проверил, работают. Да я то заведу А если возникнет ситуация, когда такую переменную надо заводить динамически, при сборке проекта юзерами программы? Нет, ну обычно в INSTALL пишут типа пропишите то, сё ручками, если хотите чего-то. До полного автоматизма похоже не довести. |
|
|
SABROG |
3.2.2009, 18:53
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
Текстовая версия | Сейчас: 26.11.2024, 12:07 |