Есть несколько вопросов о том, как создать шаг предварительной сборки для qmake
, я могу сделать это с этим в файле .pro
:
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands = cd $$PWD; python ./version_getter.py -p $$TARGET
PRE_TARGETDEPS += ../VersionData/versioning.h
QMAKE_EXTRA_TARGETS += versionTarget
Теперь проблема заключается в том, что этот подход не является самим положением сборки, а просто другой целью сборки, поэтому, если у меня есть флаг -j
, настроенный для make
, он запускает мой script параллельно с другой сборкой рабочие места. Это очень плохо, потому что мой script создает/обновляет заголовочный файл - если он меняет часть пути, компиляция неприемлема.
Итак, все-таки я могу запустить этот script до того, как будет запущена какая-либо компиляция? Я знаю, что могу создать еще один script и последовательно вызывать version_getter.py
и qmake
, но это нежелательно, поскольку мне пришлось бы компилироваться из командной строки, а не из Qt Creator.
Update
Полный .pri
файл, который включен в каждый из моих подпроектов, находится ниже:
CONFIG += thread
QT += core \
gui
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands = cd $$PWD; python ./version_getter.py -p $$TARGET
PRE_TARGETDEPS += ../VersionData/versioning.h
QMAKE_EXTRA_TARGETS += versionTarget
DEPENDPATH += ../VersionData
INCLUDEPATH += ../VersionData
HEADERS += ../VersionData/versioning.h
UI_HEADERS_DIR = $${_PRO_FILE_PWD_}/include/Qui
DESTDIR = $(SYREN_PATH)
!win32-msvc {
QMAKE_CXXFLAGS += -std=c++0x
}
Но это все равно приводит к такому же параллельному поведению. Я думал, что это возможно из-за моего использования ccache
, но отключение его не имело никакого значения (кроме, конечно, гораздо медленнее).