Как обратиться к исходному каталогу в qmake? - PullRequest
9 голосов
/ 04 марта 2011

Я добавил

version.target = version.h
version.commands = bash generate-version.sh

QMAKE_EXTRA_TARGETS += version

PRE_TARGETDEPS += version.h

в проект, но он пытается запустить "generate-version.sh" в целевом каталоге:

make: Leaving directory `.../qqq-build-desktop'
make: Entering directory `.../qqq-build-desktop'
Makefile:236: warning: overriding commands for target `version.h'
Makefile:233: warning: ignoring old commands for target `version.h'
bash generate-version.sh
bash: generate-version.sh: No such file or directory
make: Leaving directory `.../qqq-build-desktop'

Существует $$ DESTDIR, ноЯ не вижу $$ SRCDIR.Как обратиться к каталогу проекта в qmake (или как это переписать)?

Ответы [ 5 ]

12 голосов
/ 04 марта 2011

Моя первая мысль - попытаться переписать

version.commands = bash generate-version.sh

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

version.commands = echo \'char VERSION[]=\"1.0\";\' > version.h && ls && echo Done

Если вы застряли с вызовом скрипта, вероятно, вы ищете PWD или OUT_PWD. Из справочника переменных qmake

PWD

Эта переменная содержит полный путь, ведущий к каталогу, в котором находится файл проекта qmake (project.pro).

OUT_PWD

Эта переменная содержит полный путь, ведущий к каталогу, куда qmake помещает сгенерированный Makefile.

Единственное предостережение, которое не упомянуто в документации, заключается в том, что если вы делаете рекурсивный qmake, PWD ссылается на то, откуда был прочитан файл .pro верхнего уровня. Таким образом, если вы запустите qmake -r из {proj-root}, когда наконец будет прочитан sub / sub / sub / dir-proj.pro, PWD все равно будет указывать на {proj-root}.

Предполагая, что generate-version.sh находится в том же каталоге, что и ваш .pro-файл верхнего уровня, вы можете попробовать:

version.commands = bash $$PWD/generate-version.sh
1 голос
/ 09 июня 2012

Я нашел лучшее и более чистое решение

version.target = version.h
version.commands = bash ${QMAKE_VAR__PRO_FILE_PWD_}/generate-version.sh
QMAKE_EXTRA_TARGETS += version

Переменная _PRO_FILE_PWD_ задокументирована начиная с qt 4.5 и содержит путь к каталогу, содержащему используемый файл проекта (Содержит.pro file)

Но для доступа к этой переменной необходимо добавить QMAKE_EXTRA_TARGETS , QMAKE_VAR_ .

0 голосов
/ 29 июня 2016

Это работает и легко понять.

version.commands = ( cd $${PWD}; generate-version.sh )
0 голосов
/ 29 января 2015

Я использую (Linux и g ++)

DEFINES += SVN_VERSION=\\\"\""`svnversion $$PWD`\""\\\"
DEFINES += COMPILE_DATE=\\\"\""`date`\""\\\"
DEFINES += SW_VERSION=\\\"\"0.5\"\\\"

, который определяет макрос SVNVERSON как версию svn.Чтобы получить к нему доступ из C ++:

QString svnVersion = SVN_VERSION;
QString swVersion  = SW_VERSION;

Объяснение: В оболочке я хочу увидеть этот вызов:

-DSVN_VERSION=\""`svnversion /path/to/my/source`"\"

Как видите, на уровне оболочки необходимы некоторые экранированные символы.В .pro-файле его необходимо дважды экранировать.

0 голосов
/ 16 июня 2014

PWD

Указывает полный путь, ведущий к каталогу, содержащему текущий анализируемый файл.Это может быть полезно для ссылки на файлы в дереве исходного кода при записи файлов проекта для поддержки теневых сборок.

...