【问题标题】:Delete directory contents with qmake during build在构建期间使用 qmake 删除目录内容
【发布时间】:2015-09-23 18:54:45
【问题描述】:

我希望 QMAKE_CLEAN 清空/删除我的构建目录中的数据目录。我已经清除了构建目录中的所有 DLL,如下所示:

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

而且效果很好。

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

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

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

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

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

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

【问题讨论】:

    标签: qt qt4 qmake del


    【解决方案1】:

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

    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的全部内容。

    【讨论】:

    • 在 Qt 5 中似乎不起作用。/Q 自动更改为 \Q。我不确定如何防止自动替换。
    • @Zitrax 对于 Qt5,使用 QMAKE_DEL_TREE 可能会更好。看到这个帖子:stackoverflow.com/a/42239037/1666676
    • @Zitrax 你有想过这个吗?我刚刚将一个项目升级到 qt5 并且遇到了同样的问题。尽管QMAKE_DEL_TREE 确实可以作为后链接,但当目录尚不存在时它会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2011-01-13
    • 2017-01-25
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多