在构建期间使用 qmake 删除目录内容

Delete directory contents with qmake during build

我想 QMAKE_CLEAN 到 empty/delete 我的构建目录中的数据目录。我已经清除了构建目录中的所有 DLL,如下所示:

win32: {
    Debug: {
        QMAKE_CLEAN += $$slasher("$${OUT_PWD}/debug/*.dll")
    } else {
        QMAKE_CLEAN += $$slasher("$${OUT_PWD}/release/*.dll")
    }
}

而且效果很好。

但是,当我尝试像这样删除目录的全部内容时:

QMAKE_CLEAN += $$slasher("Q:/stuff/*.*")

无法正常工作。我查看了编译输出 window 并看到了这段文字:

Q:\stuff\*.*, Are you sure (Y/N)? 

为什么会出现这个提示,我该如何解决?

仅供参考,`slasher' 函数只是在 Windows 机器上将正斜杠转换为反斜杠的便利函数。

显然 Windows del 命令在使用全局通配符时需要提示。您可以通过将 /Q 标志添加到 windows 中的删除调用来抑制此提示,如下所示:

QMAKE_CLEAN += "$$slasher("Q:/stuff/*.*") /Q"

它充其量只是粗略的,但它确实有效。如果有人知道 Qt4 中的另一种方式,我很乐意听到。

编辑 我刚刚发现,如果您在 PRO 文件中调用此语法两次,编译器会报错。我的解决方法是在它自己的 QMAKE_CLEAN 调用中将 /Q 移动到 PRO 文件的最后。它通过在 clean 期间引起对 del /Q 的额外调用而良性地混淆了 qmake,但似乎按预期工作。

例如...

QMAKE_CLEAN += "$$slasher("Q:/stuff1/*.*")"
QMAKE_CLEAN += "$$slasher("Q:/stuff2/*.*")"
QMAKE_CLEAN += /Q

...将删除 stuff1stuff2 的全部内容。