qmake перед сборкой шаг перед ЛЮБОЙ компиляцией
На SO есть несколько вопросов относительно того, как создать шаг перед сборкой для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
он запускает мой скрипт впараллельно с другими работами сборки. Это очень плохо, потому что мой скрипт создает / обновляет заголовочный файл - его изменение во время компиляции недопустимо.
Итак, могу ли я выполнить этот сценарий раньше?Любые компиляция запущена? Я знаю, что могу создать еще один сценарий и вызватьversion_getter.py
а такжеqmake
по порядку, но это нежелательно, так как мне придется компилировать из командной строки, а не из Qt Creator.
Полный.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
, но отключение не имело никакого значения (кроме того, что, конечно, было намного медленнее).