如何在目录中添加所有.pri文件

时间:2017-02-16 11:31:45

标签: c++ qt qt5 qmake

我搜索得非常彻底,但无法找到一种方法来获取目录中的所有文件夹。我有以下qt项目结构

first/
    second/
       - second.pri

    third/
       - third.pri
    ...
    first.pri

我想在first.pri文件中包含所有pri文件。我能做到

include($$PWD/second/second.pri)
include($$PWD/third/third.pri)
...

但问题是将来可能会添加许多子目录,我想自动包含所有pri文件。我试过了

FILES = $$files($$PWD/*/*.pri)
for(FILE, FILES) {
    include($$FILE)
}

但是这找不到'first'文件夹中的文件夹。 $$files documentation允许指定递归,但它不会下降到子目录中。我如何实现它?

1 个答案:

答案 0 :(得分:1)

以下QMAKE函数以递归方式列出目录下的所有文件:

# - Function that list all files below a directory
defineReplace(list_recursively) {
    FILES = $$files($$1)
    RESULT =
    for(var, $$list($$FILES)) {
        exists($$var)
        {
            RESULT *= $$find(var, .*\.pri)
            RESULT *= $$list_recursively($$var/*)
        }
    }
    return($$RESULT)
}

# - Define the base directory
DIR = $$PWD/*

# - Test the function
temp_dir = $$list_recursively($$DIR)

# - Output the result 
for(var, $$list($$temp_dir)) {
    message($$var)
}

list_recursively功能中,可以仅过滤具有特定扩展名的文件,例如.pri。如果您的项目结构仅包含.pri文件,则甚至不需要这样做。

注意:QMake无法正常使用空格,避免使用它们通常是个好主意。

编辑:

为.pri文件添加了一个过滤器。