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

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

重现这种情况的步骤:

  1. qmake test.pro
  2. 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' 上执行配置文件的某些部分

我怎样才能做到这一点?

【问题讨论】:

    标签: qt makefile qmake


    【解决方案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 上禁用某些签入配置文件,我会很高兴
      • 所以我认为最好修正你写的规则
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多