Путь к Qt хидерам [qmake]
От: nen777w  
Дата: 10.02.14 23:09
Оценка:
Если посмотреть как утилита qmake генерирует Make файлы, то с самого начала в INCPATH после пользовательских хидеров попадают пути к Qt хидерам. т.е.

INCPATH = -I сперв пользовтальские потом Qt-шные... -I"C:\Qt\qt_minGW32_520\qtbase\include" -I"C:\Qt\qt_minGW32_520\qtbase\include\QtPrintSupport" и т.д.

У меня при сборке в qmake описан custom pre-build step, и мне там нужны эти пути.
Но если просто использовать эту переменную $$(INCPATH) или даже вывести ее message($$INCPATH) то это будет аналогично использованию INCLUDEPATH т.е. она будет содержать только пользовательские пути к хидерам.

Есть ли способ получить Qt-шные?
Re: Путь к Qt хидерам [qmake]
От: Аноним  
Дата: 10.02.14 23:29
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Если посмотреть как утилита qmake генерирует Make файлы, то с самого начала в INCPATH после пользовательских хидеров попадают пути к Qt хидерам. т.е.

N>

N>INCPATH = -I сперв пользовтальские потом Qt-шные... -I"C:\Qt\qt_minGW32_520\qtbase\include" -I"C:\Qt\qt_minGW32_520\qtbase\include\QtPrintSupport" и т.д.

N>У меня при сборке в qmake описан custom pre-build step, и мне там нужны эти пути.
N>Но если просто использовать эту переменную $$(INCPATH) или даже вывести ее message($$INCPATH) то это будет аналогично использованию INCLUDEPATH т.е. она будет содержать только пользовательские пути к хидерам.

N>Есть ли способ получить Qt-шные?


— $$QMAKE_INCDIR
— $$system(qmake -query QT_INSTALL_HEADERS)
Re[2]: Путь к Qt хидерам [qmake]
От: nen777w  
Дата: 10.02.14 23:45
Оценка:
N>>Есть ли способ получить Qt-шные?

А>- $$QMAKE_INCDIR

А>- $$system(qmake -query QT_INSTALL_HEADERS)

message($$QMAKE_INCDIR) — ничего не выводит
message($$system(qmake -query QT_INSTALL_HEADERS)) — выводит только это C:/Qt/qt_minGW32_520/qtbase/include
Re[3]: Путь к Qt хидерам [qmake]
От: Аноним  
Дата: 11.02.14 07:57
Оценка:
Здравствуйте, nen777w, Вы писали:

N>>>Есть ли способ получить Qt-шные?


А>>- $$QMAKE_INCDIR

А>>- $$system(qmake -query QT_INSTALL_HEADERS)

N>message($$QMAKE_INCDIR) — ничего не выводит

N>message($$system(qmake -query QT_INSTALL_HEADERS)) — выводит только это C:/Qt/qt_minGW32_520/qtbase/include

попробуй сделай "qmake -d" и посмотри, в какой момент изменяется INCPATH и что туда прибавляют и из какой переменной
Re[3]: Путь к Qt хидерам [qmake]
От: _niko_ Россия  
Дата: 11.02.14 08:22
Оценка:
Здравствуйте, nen777w, Вы писали:

N>>>Есть ли способ получить Qt-шные?


А>>- $$QMAKE_INCDIR

А>>- $$system(qmake -query QT_INSTALL_HEADERS)

N>message($$QMAKE_INCDIR) — ничего не выводит

N>message($$system(qmake -query QT_INSTALL_HEADERS)) — выводит только это C:/Qt/qt_minGW32_520/qtbase/include
Подкаталоги Qt'шка сама уже добавляет на основе подключенных модулей.

Если необходимо получать полный путь для конкретного модуля QT могу предложить следующее решение:
defineReplace(get_sub_folder_by_qt_module) {
    arg1=$${1}
    #Допускаю что тут можно как то все в перебор списка завернуть, но у меня чет не вышло.
    core=QtCore
    gui=QtGui
    xml=QtXml
    isEqual(arg1, core) return($${core})
    isEqual(arg1, gui)  return($${gui})
    isEqual(arg1, xml)  return($${xml})
    error(Folder for the module $${arg1} is not defined)
}

defineReplace(get_path_include_by_qt_module) {
    return($$[QT_INSTALL_HEADERS]/$$get_sub_folder_by_qt_module($${1}))
}

message(--------------------------)
message(Modules folder names:)
for(module, QT) message($${module} = $$get_sub_folder_by_qt_module($${module}))
message(--------------------------)
message(Modules headers paths:)
for(module, QT) message($${module} = $$get_path_include_by_qt_module($${module}))
message(--------------------------)

Результат:
Project MESSAGE: --------------------------
Project MESSAGE: Modules folder names:
Project MESSAGE: core = QtCore
Project MESSAGE: gui = QtGui
Project MESSAGE: xml = QtXml
Project MESSAGE: --------------------------
Project MESSAGE: Modules headers paths:
Project MESSAGE: core = C:/Qt/qt_minGW32_520/qtbase/include/QtCore
Project MESSAGE: gui = C:/Qt/qt_minGW32_520/qtbase/include/QtGui
Project MESSAGE: xml = C:/Qt/qt_minGW32_520/qtbase/include/QtXml
Project MESSAGE: --------------------------
Re[4]: Путь к Qt хидерам [qmake]
От: nen777w  
Дата: 11.02.14 09:43
Оценка:
__>Если необходимо получать полный путь для конкретного модуля QT могу предложить следующее решение:

Спасибо!
Я немного переписал это вот так:

        defineReplace(get_sub_folder_by_qt_module) {
            arg1=$${1}
            for(sub, $$list(Core Gui Xml Network Widgets PrintSupport)) {
                isEqual(arg1, $$lower($$sub)) {
                    return(Qt$$sub)
                }
            }

            error(Folder for the module $${arg1} is not defined)
        }

        defineReplace(get_path_include_by_qt_module) {
            return($$[QT_INSTALL_HEADERS]/$$get_sub_folder_by_qt_module($${1}))
        }

        message(--------------------------)
        message(Modules folder names:)
        for(module, QT) message($${module} = $$get_sub_folder_by_qt_module($${module}))
        message(--------------------------)
        message(Modules headers paths:)
        for(module, QT) message($${module} = $$get_path_include_by_qt_module($${module}))
        message(--------------------------)


Пока буду использовать этот вариант, но ИМХО как то должно быть проще.
Re[5]: Путь к Qt хидерам [qmake]
От: nen777w  
Дата: 11.02.14 10:21
Оценка:
Еще ожно небольшое обновление:
— добавил единую функцию для получение все путей
— значения из переменной QT выбираются как уникальные. ХЗ почему, но при уникальных значениях описанных выше по файлу, некоторые их них почему-то все же дублируются


defineReplace(get_sub_folder_by_qt_module) {
    arg1=$${1}
    for(sub, $$list(Core Gui Xml Network Widgets PrintSupport)) {
        isEqual(arg1, $$lower($$sub)) {
            return(Qt$$sub)
        }
    }

    error(Folder for the module $${arg1} is not defined)
}

defineReplace(get_path_include_by_qt_module) {
    return($$[QT_INSTALL_HEADERS]/$$get_sub_folder_by_qt_module($${1}))
}

defineReplace(get_all_qt_path) {
    QT_modules = $$unique(QT)
    result=
    for(module, QT_modules) result += $$get_path_include_by_qt_module($${module})
    return($$result)
}
Re[6]: Путь к Qt хидерам [qmake]
От: _niko_ Россия  
Дата: 03.04.14 09:22
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Еще ожно небольшое обновление:

N> — добавил единую функцию для получение все путей
N> — значения из переменной QT выбираются как уникальные. ХЗ почему, но при уникальных значениях описанных выше по файлу, некоторые их них почему-то все же дублируются


N>defineReplace(get_sub_folder_by_qt_module) {
N>    arg1=$${1}
N>    for(sub, $$list(Core Gui Xml Network Widgets PrintSupport)) {
N>        isEqual(arg1, $$lower($$sub)) {
N>            return(Qt$$sub)
N>        }
N>    }

N>    error(Folder for the module $${arg1} is not defined)
N>}

N>defineReplace(get_path_include_by_qt_module) {
N>    return($$[QT_INSTALL_HEADERS]/$$get_sub_folder_by_qt_module($${1}))
N>}

N>defineReplace(get_all_qt_path) {
N>    QT_modules = $$unique(QT)
N>    result=
N>    for(module, QT_modules) result += $$get_path_include_by_qt_module($${module})
N>    return($$result)
N>}
N>

N>Пока буду использовать этот вариант, но ИМХО как то должно быть проще.

Ивпрям можно проще
И вот как:

defineReplace(get_all_qt_path) {
    result=
    for (module, QT) {
        module_name = $$member(QT.$${module}.name)
        !isEmpty(module_name) {
            module_includes = $$member(QT.$${module}.includes)\\$${module_name}
            result *= $${module_includes}
        }
    }
    return($${result})
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.