检查文件夹是否存在并在.pro文件中创建文件夹

6
我需要在目标路径中创建一个文件夹并复制头文件。 因此,我在.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 构建会抛出错误。

我尝试过:

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

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

1
如果您编写 QMAKE_POST_LINK += $$quote(if not exists $${DESTDIR_WIN_CELLTWEAK} mkdir $${DESTDIR_WIN_CELLTWEAK}),会发生什么? - vahancho
好的,我会检查并更新。谢谢Vahancho。 - Wagmare
@vahancho:它没有进入函数内部,甚至文件夹也不存在。 - Wagmare
我不确定qmake的语法,但是想法是使用以下批处理命令:if not exists my_dir mkdir my_dir。这样只有在my_dir不存在时才会创建它。 - vahancho
无论如何,它对我帮助很大。如果可能的话,我会找到一些替代方法并在这里发布。谢谢。 - Wagmare
3个回答

7

这是我如何解决的问题。

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

我在if语句中添加了一个判断是否为空的条件,在else语句中创建了该目录。

3

我知道这是一个比较老的问题,但我曾经也遇到过同样的问题,而且我认为我现在已经找到了解决方法。

在您的代码中,问题出在括号上:它应该与条件语句的同一行。

以下代码应该可以解决问题:

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

听起来很荒谬,但那就是事实...


这绝对是正确的答案。OP帖子中唯一的问题是代码块中的{需要与!exists(xxxx)语句在同一行。 - Phlucious
值得一提的是,为了记录,QMAKE_MKDIR_CMD会自动扩展以首先检查文件夹是否存在。 - Phlucious

1

用于预构建

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文件中添加这些行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接