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
and 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
,但将其关闭并没有什么不同(当然除了要慢得多)。