如何防止在 make clean 上运行 qmake?

Posted

技术标签:

【中文标题】如何防止在 make clean 上运行 qmake?【英文标题】:How to prevent running qmake on make clean? 【发布时间】:2018-05-25 14:36:05 【问题描述】:

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

重现这种情况的步骤:

    qmake test.pro touch test.pro && make clean

这是一个简单的 pro 示例:

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

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

我想摆脱这种行为,或者至少让 qmake 不要在 'make clean' 上执行配置文件的某些部分

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

经过一些研究,我得出了一个看起来不好看但可行的解决方案。 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

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

【讨论】:

【参考方案2】:

编辑生成的 Makefile 并删除调用 qmake 的部分。

但规则的存在是有原因的。也许您正在尝试解决不同的问题?

【讨论】:

感谢您的回复!在配置文件中,我编写了一些规则来检查是否所有 pkg​​-config 依赖项都具有正确的版本。例如:我需要 soomelib 1.1 版。如果 somelib 版本 1.0 上有,qmake 将退出并出错。但是当我运行“make clean”时,这个规则也会执行......我不会手动修改 Makefile。如果有任何可能在 make clean 上禁用某些签入配置文件,我会很高兴 所以我认为最好修正你写的规则

以上是关于如何防止在 make clean 上运行 qmake?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 告诉我我的 SLOT 不存在,但是通过 make clean,让它不再抱怨

configure make make clean make install区别联系

使用 AOSP 对 dts 进行更改后如何在不使用 make clean 的情况下构建?

makefile教程

make clean 和make distclean的区别

make clean与make distclean的区别