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 $?
- 打印退出代码
我正在尝试检测 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 $?
- 打印退出代码