首页 > 解决方案 > 在 CMake 中对版本字符串进行排序

问题描述

我正在将一个 qmake 项目转换为 cmake,并且我能够让它工作,除了相当于!versionAtLeast(QT_VERSION, 5.11): error("Use at least Qt version 5.11".

这里的问题是我目前正在使用用户提供的变量-DQt5_PREFIX=/path/to/Qt5/prefix来通知 CMake Qt 库的位置。在 macOS 中,这是/Applications/Qt5/5.xx.x/clang_64默认设置。

我想在我的 cmake 脚本中实现的是一个功能如下:

set(Qt_ROOT "/Applications/Qt")
GetQt5Prefix(Qt5_PREFIX ${Qt_ROOT} version_spec)
message("use Qt5 from ${Qt5_PREFIX}")

# suppose that in /Applications/Qt,
# I have three Qt: 5.11.2, 5.10.3 5.12.1
# the above will print "use Qt5 from"
# 5.12.1 if version_spec is 5
# 5.11.2 if version_spec is 5.11
# empty if version_spec is 5.10.1

从我目前所掌握的情况来看,我认为这个功能应该做

  1. glob 在 Qt5_ROOT 中查找所有看起来像版本字符串的子目录
  2. 根据版本字符串(也是目录名称)对目录进行排序,这可能涉及将字符串解析为主要、次要和补丁。
  3. 将解析后的版本字符串与 version_spec 进行比较以获取请求的版本
  4. 设置输出变量

任何人都可以帮助解决上述 1、2 或 3 中的任何一个问题吗?谢谢!

标签: cmakeqmake

解决方案


推荐阅读