【问题标题】:check folder exist and create folder in .pro file检查文件夹是否存在并在 .pro 文件中创建文件夹
【发布时间】:2026-02-11 11:20:20
【问题描述】:

我必须在我的目标路径中创建一个文件夹并复制头文件。

所以我在 .pro 文件中使用了以下命令

 DESTDIR_WIN_CELLTWEAK = $${CORE_API_PATH}/Include/spgc/
    DESTDIR_WIN_CELLTWEAK ~= s,/,\\,g
    QMAKE_POST_LINK += $$quote(mkdir $${DESTDIR_WIN_CELLTWEAK} $$escape_expand(\n\t))
    for(FILE,EXPORTED_HEADERS_WIN){
                QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN_CELLTWEAK}&$$escape_expand(\n\t))
    }

它是第一次创建文件夹。但是在构建第二个时,我必须避免创建 spgc 文件夹(因为已经存在)。

如果 spgc 文件夹已经存在,qt build 也会抛出错误。

我试过了

!exists($${DESTDIR_WIN_CELLTWEAK})
    {
        $$quote($${DESTDIR_WIN_CELLTWEAK})
        QMAKE_POST_LINK += $$quote(mkdir $${DESTDIR_WIN_CELLTWEAK} $$escape_expand(\n\t))
    }

但即使文件夹存在,!exists() 函数也会被调用并创建文件夹。

【问题讨论】:

  • 如果你写QMAKE_POST_LINK += $$quote(if not exists $${DESTDIR_WIN_CELLTWEAK} mkdir $${DESTDIR_WIN_CELLTWEAK})会怎样
  • 好的,我会检查并更新。谢谢 vahancho
  • @vahancho : 它没有进入函数内部,甚至文件夹也不存在。
  • 我不确定qmake 的语法,但想法是使用以下批处理命令if not exists my_dir mkdir my_dir。这样my_dir 只有在它不存在时才会被创建。
  • 任何它如何帮助我很多 vahancho 。如果可以的话,我会找到一些替代方法并在这里发布。谢谢

标签: qt qmake


【解决方案1】:

我就是这样解决的

exists($$DESTDIR_WIN_CELLTWEAK) {
        message("existing")
    } else {
            QMAKE_POST_LINK += $$quote(mkdir $${DESTDIR_WIN_CELLTWEAK} $$escape_expand(\n\t))
    }

我添加了 if 为空,否则创建了目录

【讨论】:

    【解决方案2】:

    我知道这是一个很老的问题,但我遇到了同样的问题,我想我现在已经找到了解决方案。 在您的代码中,问题是括号:它应该保持在条件的同一行。

    这应该可行:

    !exists($${DESTDIR_WIN_CELLTWEAK}) {   
        $$quote($${DESTDIR_WIN_CELLTWEAK})
        QMAKE_POST_LINK += $$quote(mkdir $${DESTDIR_WIN_CELLTWEAK} $$escape_expand(\n\t))
    }
    

    这听起来很荒谬,但就是这样......

    【讨论】:

    • 这是目前为止的正确答案。 OP 帖子中的唯一问题是他的代码块中的 { 需要与 !exists(xxxx) 语句位于同一行。
    • 还值得后人指出,QMAKE_MKDIR_CMD 会自动扩展为首先检查文件夹是否存在。 forum.qt.io/topic/47895/qmake_mkdir_cmd-how-to/3
    【解决方案3】:

    用于预构建 mkdir.commands = $(CHK_DIR_EXISTS) $${DESTDIR_WIN_CELLTWEAK} $(MKDIR) $${DESTDIR_WIN_CELLTWEAK} QMAKE_EXTRA_TARGETS += mkdir

    用于后期构建 QMAKE_POST_LINK += $(CHK_DIR_EXISTS) $${DESTDIR_WIN_CELLTWEAK} $(MKDIR) $${DESTDIR_WIN_CELLTWEAK}

    在 .pro 文件中添加行

    【讨论】:

      最近更新 更多