2017-02-16 19 views
1

Я искал достаточно тщательно, но не смог найти способ получить все папки внутри каталога. У меня есть следующая структура проекта qtКак добавить все .pri-файлы в каталог

first/ 
    second/ 
     - second.pri 

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

Я хочу включить все файлы pri в файл first.pri. Я могу сделать

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

Но проблема может быть много подкаталогов добавлен в будущем, и я хочу, чтобы автоматически включать все ПОИ файлы. Я пробовал

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

Но это не находит папки внутри «первой» папки. $$files documentation позволяет специфицировать рекурсивный, но не спускается в подкаталоги. Как мне это достичь?

+0

У вас есть только эти 2 уровня? или вы хотите полностью рекурсивное решение? –

+0

@AdrianMaire У меня три уровня. – akashrajkn

ответ

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 не работает правильно с пробелами, обычно рекомендуется избегать их.

EDITED:

Добавлен фильтр для .При файлов.

+0

Как получить только файлы pri? Я попробовал ($$ var/*. Pri), но ничего не печатает. – akashrajkn

+1

@akashrajkn: Я добавил фильтр для .pri-файлов. Надеюсь, это поможет. –