Моя первая мысль - попытаться переписать
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