qmake中的浮点数比较

Floating point comparison in qmake

我正在尝试检测 qmake 中库的版本,并基于该版本设置预处理器变量。我使用 pkg-config 获取版本号(十进制数)并想将其与最低版本进行比较。我可以在 shell 脚本中使用 bc 进行浮点数比较,但无法在 qmake 中使用 $$system 使其工作。

LIBSTATGRAB_OLDAPI = $$system(echo "`pkg-config --modversion libstatgrab ` < 0.90 " | bc)
equals(LIBSTATGRAB_OLDAPI,"1") {
    message("Using old libstatgrab API")
    DEFINES += LIBSTATGRAB_OLD
}

问题是 $$system 的 shell 命令 运行 似乎将引号中的 < 字符解释为读取文件命令,并且不会将整个引用块通过管道传输到 bc。

sh: 1: cannot open 0.90: No such file

我该如何解决这个问题?

如果版本号有多个定界符,则使用 bc 是不可靠的,例如0.90.1。我的解决方案使用 sort:

LIBSTATGRAB_OLDAPI = $$system(echo "`pkg-config --modversion libstatgrab` \\n 0.90" | sort -VbC; echo $?)

说明

sort 正在尝试检查是否0.95 \n 0.90 未排序,如果存在,代码为 1.

\n 用四个反斜杠转义,这是 qmake 的要求。为了便于阅读,\n 也被空格包围,sort -b 处理空白。

sort -V - 专为版本排序

sort -b - 忽略空格

sort -C - 静默检查,我们只需要退出代码

echo $? - 打印退出代码