QMake 和 pkg 配置
QMake and pkg-config
我在我的一个 Qt 应用程序中使用 libqtermwidget。正好在0.8.0版本的库中,引入了一些0.6.0版本没有的新特性。
由于libqtermwidget不提供任何版本宏,我想在qmake中使用pkg-config来检查它的版本,就像这样:
# 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
您应该使用 $$system()
调用 pkg-config
并读取标准输出(如果有)。但是,让我们以更 "generic" 的方式对其进行编程:
# finds package version by invoking 'pkg-config'
# $ = package
# note: stores value in cache (stash) file for subsequent use
defineReplace(findPackage) {
# using <package>Version variable
pkg = $Version
!defined($$pkg, var) {
# cache miss
# note: $$pkgConfigExecutable() is an undocumented function from qt_functions.prf
$$pkg = $$system($$pkgConfigExecutable() --modversion $)
# 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
}
我在我的一个 Qt 应用程序中使用 libqtermwidget。正好在0.8.0版本的库中,引入了一些0.6.0版本没有的新特性。
由于libqtermwidget不提供任何版本宏,我想在qmake中使用pkg-config来检查它的版本,就像这样:
# 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
您应该使用 $$system()
调用 pkg-config
并读取标准输出(如果有)。但是,让我们以更 "generic" 的方式对其进行编程:
# finds package version by invoking 'pkg-config'
# $ = package
# note: stores value in cache (stash) file for subsequent use
defineReplace(findPackage) {
# using <package>Version variable
pkg = $Version
!defined($$pkg, var) {
# cache miss
# note: $$pkgConfigExecutable() is an undocumented function from qt_functions.prf
$$pkg = $$system($$pkgConfigExecutable() --modversion $)
# 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
}