如何防止运行 qmake on make clean?

How to prevent running qmake on make clean?

问题是如果 pro 文件被更改 'qmake' 试图在 'make clean' 期间生成新的 makefile。

重现这种情况的步骤:

  1. qmake test.pro
  2. 触摸test.pro && 清洁

这里是 pro 的一个最小示例:

TARGET = qmake-runs-on-make-clean  
TEMPLATE = app

warning(qmake runs even if it's make clean)

我想摆脱这种行为,或者至少让 qmake 不在 'make clean'

上处理 pro 文件的某些部分

我怎样才能做到这一点?

编辑生成的Makefile,去掉调用qmake的部分。

但这条规则是有原因的。也许您正在尝试解决其他问题?

经过一番研究,我得出了一个外观不佳但可行的解决方案。 qmake 有一个名为 'no_autoqmake' 的 undocumented option。所以我将它传递给 CONFIG,然后编写了我自己的 Makefile 目标。

CONFIG += no_autoqmake
for(arg, QMAKE_ARGS){
    tmp = $$section(arg, =, 0, 0)
    !equals(tmp, MAKE_ARGS){
        QMAKE_ARGUMENTS += $$arg
    }
}

promod.name      = on_pro_modified
promod.target    = Makefile
promod.commands  = $$QMAKE_QMAKE $$_PRO_FILE_ $$QMAKE_ARGUMENTS MAKE_ARGS='$(MAKECMDGOALS)'
promod.depends   = $$_PRO_FILE_ $$QMAKE_INTERNAL_INCLUDED_FILES

PRE_TARGETDEPS += $$_PRO_FILE_
QMAKE_EXTRA_TARGETS += promod

contains(MAKE_ARGS, clean) : CLEAN_MODE_ACTIVATED=1

如果有人找到更好的解决方案,请分享。