qhacer paso previo a la compilación antes de cualquier compilación
Hay varias preguntas sobre SO sobre cómo crear un paso previo a la compilación paraqmake
, Puedo hacer eso con esto en mi.pro
expediente:
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
Ahora, el problema es que este enfoque no es un paso de compilación per se, sino simplemente otro objetivo de compilación, así que si tengo la-j
bandera configurada paramake
ejecuta mi script enparalela con los otros trabajos de construcción. Esto es muy malo, porque mi secuencia de comandos crea / actualiza un archivo de encabezado, ya que cambiarlo en parte a través de la compilación no es aceptable.
Entonces, ¿existe de todos modos puedo tener este script ejecutado antes?alguna se ejecuta la compilacion? Sé que puedo crear otro script y llamar alversion_getter.py
yqmake
en secuencia de eso, pero esto no es deseable ya que tendría que compilar desde la línea de comandos en lugar de hacerlo desde dentro de Qt Creator.
El completo.pri
El archivo que está incluido en cada uno de mis subproyectos está a continuación:
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
}
Pero esto todavía resulta en el mismo comportamiento paralelo. Pensé que podría haber sido debido a mi uso deccache
, pero apagarlo no hizo ninguna diferencia (aparte de ser mucho más lento, por supuesto).