如何在 qmake 之后 运行 一个脚本?

How to run a script after qmake?

我希望 qmake 自动 运行 一个 (python) 脚本。此脚本修改makefile,因此必须在qmake生成makefile之后,make之前执行。

到目前为止,我只找到了 2 种方法来 运行 来自 qmake 的脚本:

在我的 .pro 文件中使用 system(),但是在 qmake 之前 运行s - 太快了:

win32: PYTHON=python.exe
else:  PYTHON=python
system($$PYTHON ./test.py) 

或使用 QMAKE_EXTRA_TARGETS 通过自定义构建目标,但这由 make 调用(为时已晚)。

有什么方法可以在 qmake 生成 makefile 后 运行 脚本?

Cotire (compile time reducer) CMake 可能是你的朋友。

它具有以下您正在寻找的加速构建的功能:

Automatically generates a single compilation unit (aka unity source file) for a CMake target.

我没用过但是推荐在C++ best practice list.

由于我们的项目使用 TEMPLATE = subdirs,我通过创建新的子目录解决了这个问题,该子目录由 qmake 作为最后一个解析。在其 pro 文件中,我通过 system() 调用使用 TEMPLATE = aux 和 运行 脚本。

这不是最好的解决方案,但效果很好。

以下内容多年来对我很有效。

  1. 创建调用 qmake 的 .cmd 或 .sh 脚本,然后创建您的脚本:

    %QTDIR%\bin\qmake %* python.exe test.py

  2. 将脚本保存在可以通过 PATH 环境找到的位置
  3. 在您的 .pro 文件中添加以下内容:

    QMAKE_QMAKE = myqmake

  4. 然后简单地调用 myqmake 而不是 qmake

如果脚本 运行 在 Qt 环境之外(例如来自 IDE),那么它可能需要定义 QTDIR 和 QMAKESPEC 环境。