defineReplace

defineReplace очень полезная оказывается штуковина господа! Это по сути функция вызываемая в pro файле. Причем ее можно определить в отдельном глобальном pri файле и подключать ко всм своим проектам. 

Что делает конструкция ниже, точнее что сделает:
INCLUDEPATH += $$includePath($$PWD/../blablabla)
(это в pro файле):

defineReplace(cleanPath) {
    win32:1 ~= s|\\\\|/|g

    #message(cleanPath 1: $$1)

    contains(1, ^/.*):pfx = /
    else:pfx =
    segs = $$split(1, /)
    out =
    for(seg, segs) {
        equals(seg, ..):out = $$member(out, 0, -2)
        else:!equals(seg, .):out += $$seg
    }
    #message(out : $$out)
    #message(pfx : $$pfx)

    win32:return($$join(out, /, $$pfx))


    return($$join(out, /, $ $pfx))
}


defineReplace(includePath) {

    #message(1: $$1)
    !exists($$1){ #проверяет существует ли переданный путь в файловой системе (он в $$1)
        error(unavailable path : $$1 )
    }

    path_for_INCLUDE = $$cleanPath($$1) #избавляемся от относительных переходов типа  /../

    contains( INCLUDEPATH, $$path_for_INCLUDE ) {
        message(already included : $$path_for_INCLUDE)
      return ("")
    }

    #message(now included : $$path_for_INCLUDE)
    return($$path_for_INCLUDE)
}

defineReplace(cleanPath) убирает переходы в пути типа /../, точнее их преобразует к правильному абсолютному пути в файловой системе.

INCLUDEPATH += $$includePath($$PWD/../blablabla) сначала проверяет существует ли путь $$PWD/../blablabla в файловой системе.
Потом избавляемся от относительных переходов типа  /../.

Потом проверяем - не существует ли уже в INCLUDEPATH добавляемый путь и если существует не добавляем (зачем нам дубли).

В итоге

Теперь у нас никогда не будет путей дублеров в INCLUDEPATH. Это очень нам поможет при разделении больших проектов на подпроекты и т.д.