You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免执行make clean时自动运行qmake?

我之前也碰到过这个头疼的问题,根源在于qmake生成的Makefile默认把.pro文件设为自身的依赖项——只要.pro有修改,不管你执行make还是make clean,都会先触发qmake重新生成Makefile。这里有两个解决方向,看你需求选:

方案1:只跳过clean场景下的特定代码

如果你只是不想让make clean时执行.pro里的某些代码(比如你那个测试用的warning),可以通过检查MAKEFLAGS环境变量来判断当前是否是clean场景,然后条件执行代码。

修改你的.pro文件成这样:

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

# 只有非clean场景才执行这段警告
!contains(MAKEFLAGS, clean) {
    warning(qmake runs even if it's make clean)
}

这样当make clean触发qmake时,因为MAKEFLAGS里带着clean关键字,这段代码就会被跳过,不会弹出警告了。

方案2:彻底阻止make clean触发qmake

如果你想完全避免make clean时跑qmake,就得修改生成的Makefile,让clean目标不再依赖于Makefile本身(这样.pro修改后,make clean不会先去更新Makefile)。

可以在.pro里加一段脚本,让qmake生成Makefile后自动修改它:

TARGET = qmake-runs-on-make-clean
TEMPLATE = app
warning(qmake runs even if it's make clean)

# Unix/Linux/macOS 环境下的处理
unix {
    # 移除clean目标对Makefile的依赖
    QMAKE_POST_LINK += @sed -i '/^clean:/s/Makefile//' $$MAKEFILE;
}

# Windows 环境(需要sed工具,比如Git Bash里的sed)
win32 {
    QMAKE_POST_LINK += @sed -i '/^clean:/s/Makefile//' $$MAKEFILE;
}

这个方法用sed把Makefile里的clean: Makefile改成clean:,这样clean目标就不会因为Makefile过期而触发qmake了。

⚠️ 注意:这个方案有点hacky,依赖qmake生成的Makefile格式,如果Qt版本更新导致Makefile结构变了,可能得调整sed命令。另外Windows下要确保系统有sed(比如装Git并把它的bin目录加到PATH里)。还有,用了这个方案后,你修改.pro文件后**必须手动跑qmake**更新Makefile,因为make和make clean都不会自动触发qmake了,这是个需要权衡的点。

内容的提问来源于stack exchange,提问作者Verkh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:32