在Cmake中,当使用LibFindMacros时,有没有办法告诉cmake库需要有最小版本号?我在http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries上找到的信息没有说明这一点。
答案 0 :(得分:0)
否...使用cmake查找库时没有集成版本支持。
我的猜测是,在大多数情况下,每个库都有自己的方法来定义它的版本,因此找出该版本的真正含义是一项艰巨的任务。在Linux系统上,您可以尝试使用dpkg或rpm等工具查询系统,但这些只会提供已安装库的版本,而不是您要编译的库。
这里有一个问题在讨论:
http://public.kitware.com/Bug/view.php?id=8396
现在,您提到的宏具有提取版本的功能,假设该库的头文件中存在#define <version> <#.#.#>
或某种类型。
https://github.com/Tronic/cmake-modules/blob/master/LibFindMacros.cmake
# Extracts a version #define from a version.h file, output stored to <PREFIX>_VERSION.
# Usage: libfind_version_header(Foobar foobar/version.h FOOBAR_VERSION_STR)
# Fourth argument "QUIET" may be used for silently testing different define names.
# This function does nothing if the version variable is already defined.
function (libfind_version_header PREFIX VERSION_H DEFINE_NAME)
...
因此,您使用此宏,从.h文件中检索#define,然后以您自己的方式比较${PREFIX}_VERSION
中保存的值。在我的库中,我经常有一组3或4 #define,包含主要版本,次要版本和发行版本号。这使得比较容易。如果将所有这些数字组合在一起,例如3.2.4.1,那么在没有专门代码的情况下进行比较就会变得更难...(同样,这使得cmake支持版本比较方案变得非常复杂。)
请注意,宏需要设置${PREFIX}_INCLUDE_DIR
。看起来libfind_pkg_detect()
设置了该变量,因此您需要首先检测库的位置(标题),然后您可以在标题中收集版本。