cmake find_path 其中路径包含版本号

Posted

技术标签:

【中文标题】cmake find_path 其中路径包含版本号【英文标题】:cmake find_path where path includes version numbers 【发布时间】:2014-12-24 16:08:07 【问题描述】:

我正在尝试编写 FindQwt.cmake 模块。我用谷歌搜索了现有的模块,但它们都不适用于我的安装。

我的模块的查找路径调用当前如下所示:

find_path ( QWT_INCLUDE_DIR
      NAMES qwt_global.h
      HINTS $QT_INCLUDE_DIR
      PATHS
      /opt
      /usr/include
      /usr/local
      /usr/local/include
      "$ENVLIB_DIR/include"
      "$ENVINCLUDE"
      PATH_SUFFIXES qwt
    )

实际的qwt_global.h 文件位于路径:/opt/qwt-6.1.2/src/qwt_global.h

如果我添加路径后缀qwt-6.1.2/src,我可以让它工作,但在我看来,如果我需要将每个版本硬编码到其中,它似乎会破坏拥有一个 find 模块的目的(假设我' m 稍后在模块中检查版本是否兼容,并且不关心兼容集中使用哪个版本。

我已经在 PATH_SUFFIXES 中尝试了 qwt*qwt*/src,但无济于事。

这似乎是一个常见问题。有谁知道如何修复这个find_path 调用以保证路径中有版本号?

编辑:我使用的是 cmake 3.0.2

【问题讨论】:

不知道 cmake,但是找到版本号的正确位置是 qwtconfig.pri - 而不是 qwtglobal.h。至少那时你处于 cmake 与 qmake 的更一般的情况。另外 /opt/qwt-6.1.2/src 的路径表明您跳过了“make install”步骤,这不是一个好主意。 感谢您的建议。不幸的是,我的发行版安装在只读文件系统上,而 /opt 是我可以访问的少数几个地方之一。 什么是跳过“make install”步骤的理由。 F.e 编辑 qwtconfig.pri 并将安装路径设置为 /opt 中的某个内容。 【参考方案1】:

您可以为此使用FILE(GLOB ...)

file(GLOB QWT_SEARCH_PATHS "/opt/qwt-*" "/usr/include/qwt-*")
find_path(QWT_INCLUDE_DIR 
    NAMES qwt_global.h
    PATHS $QWT_SEARCH_PATHS)

为了更简洁的实现,构建一个目录列表,然后迭代该列表以附加“qwt-*”glob。

【讨论】:

以上是关于cmake find_path 其中路径包含版本号的主要内容,如果未能解决你的问题,请参考以下文章

对 CMake find_path 提示使用正则表达式

CMake中find_path的使用

使用 CMake 查找 libffi 头文件

11-cmake语法-内部变量-系统信息

CMake比较实用的命令小记

Cmake中find_package命令的搜索模式之配置模式(Config mode)