QMake и pkg-config - PullRequest
       35

QMake и pkg-config

0 голосов
/ 24 июня 2019

Я использую libqtermwidget в одном из моих приложений Qt. Случилось так, что в версии 0.8.0 библиотеки были введены некоторые новые функции, которых нет в версии 0.6.0.

Поскольку libqtermwidget не предоставляет макросы версий, я хотел бы использовать pkg-config для проверки его версии, что-то вроде этого, в qmake:

# i would like a functionality like this
if pkg-config --version qtermwidget5 < 0.8.0
    DEFINES += OLD_QTERMWIDGET

Это, конечно, можно использовать внутри файла cpp:

#ifndef OLD_QTERMWIDGET
    ... code for 0.8.0 and higher ...
#endif

1 Ответ

1 голос
/ 24 июня 2019

Вы должны использовать $$system(), чтобы вызвать pkg-config и прочитать стандартный вывод (если есть). Но давайте запрограммируем его немного более «обобщенно»:

# finds package version by invoking 'pkg-config'
# $$1 = package
# note: stores value in cache (stash) file for subsequent use
defineReplace(findPackage) {
    # using <package>Version variable
    pkg = $${1}Version
    !defined($$pkg, var) {
        # cache miss
        # note: $$pkgConfigExecutable() is an undocumented function from qt_functions.prf
        $$pkg = $$system($$pkgConfigExecutable() --modversion $$1)
        # cannot store the empty value
        isEmpty($$pkg): $$pkg = 0
        # save to the stash file
        cache($$pkg, stash)
    }
    # return value of <package>Version
    return($$eval($$pkg))
}


# now using this...
qtw5 = $$findPackage(qtermwidget5)
equals(qtw5, 0) {
    error("qtermwidget5 is not installed")
} else:!versionAtLeast(qtw5, 0.8.0) {
    warning("Found an old version of qtermwidget5 ($$qtw5)")
    DEFINES += OLD_QTERMWIDGET
} else {
    # nothing
}
...