2015-10-26 133 views
3

我想让qmake自动运行一个(python)脚本。这个脚本修改了makefile,因此它必须在qmake生成makefiles之后但在make之前执行。如何在qmake之后运行脚本?

到目前为止,我只发现2种方式从QMAKE运行脚本:

在我的.pro文件中使用system(),但这QMAKE之前运行 - 太快:

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

或通过自定义构建目标使用QMAKE_EXTRA_TARGETS,但这是由make(太晚)调用的。

是否有任何方法可以在qmake生成makefiles后运行脚本?

+1

这里是[相同的老问题](https://forum.qt.io/topic/2507/qmake-automatically-running-a-command-after-qmake-generates-makefile/4),但没有答案。海事组织,如果你解释为什么你需要这个奇怪的功能将是最好的?也许有另一种解决方案?例如'cmake'而不是'qmake'。 –

+1

为什么不只是有一个运行qmake然后脚本的shell脚本/批处理文件? – MrEricSir

+0

@MarekR:我正在为一个相当大的项目[unity build](http://buffered.io/posts/the-magic-of-unity-builds/)工作 - 我需要将所有cpp文件包含到一个文件,只有这一个文件被构建。但我也想包含生成的moc文件,但我不知道在qmake运行之前是否可以知道所有moc文件。 –

回答

3

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

这不是最好的解决方案,但它工作得很好。

-1

Cotire (compile time reducer)对于CMake可能我你的朋友。

它具有以下你正在寻找加快构建功能:

为目标的CMake自动生成一个单一的编译单元(又名团结源文件)。

我没有使用它,但推荐在C++ best practice list

+0

谢谢,但我不想仅为此使用cmake。另外,我的scu版本稍微复杂一些,只有一个大的编译单元...... –

1

以下几年对我来说效果不错。

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

    %QTDIR%\ BIN \ QMAKE%* python.exe test.py

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

    QMAKE_QMAKE = myqmake

  4. 然后简单地调用myqmake而非的qmake

如果脚本将Qt的enviornment外运行,(诸如从IDE),那么它可能需要定义QTDIR和QMAKESPEC环境。

相关问题