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 其中路径包含版本号的主要内容,如果未能解决你的问题,请参考以下文章