Dependencies CMake:如何处理2.6中缺少但2.8中存在的FindXXX脚本

Dependencies CMake:如何处理2.6中缺少但2.8中存在的FindXXX脚本,dependencies,cmake,compatibility,Dependencies,Cmake,Compatibility,脚本FindHDF5.cmake在cmake2.8之后可用。我的软件运行在使用CMake 2.8或2.6的各种系统上 当我使用find_包(需要HDF5)时,它在2.8中工作,但当然不是在2.6中。因此,我想在我的项目中复制FindHDF5.cmake。但这是1。丑陋的和2。无法维护的 你如何处理这种情况 您可以将cmake的模块路径设置为您想要的任何内容: set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /opt/common/cmake-backport

脚本FindHDF5.cmake在cmake2.8之后可用。我的软件运行在使用CMake 2.8或2.6的各种系统上

当我使用find_包(需要HDF5)时,它在2.8中工作,但当然不是在2.6中。因此,我想在我的项目中复制FindHDF5.cmake。但这是1。丑陋的和2。无法维护的


你如何处理这种情况

您可以将cmake的模块路径设置为您想要的任何内容:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /opt/common/cmake-backports)
在您的(Linux)发行版上有无限种填充自定义文件的方法。您可以自己制作一个.deb/.rpm,将模块文件放入/opt/common/。。或者在/usr/share中。。。或者为这些文件提供NFS网络目录


也许最简单的方法是将cmake 2.6-hosts更新为cmake-2.8。对于大多数发行版,您可以找到现成的后端口软件包。(例如Ubuntu 10.4)

如果你真的需要使用

find_package(HDF5 REQUIRED)
那么您应该真正需要CMake 2.8或更高版本

如果必须使用CMake 2.6运行,则应提供自己的FindHDF5.CMake

如果必须,可以使用基于CMake版本的条件逻辑,例如:

if("${CMAKE_VERSION}" VERSION_LESS 2.8)
  # Use your own "CMake/FindHDF5.make"...
  set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH})
endif()
但是,CMAKE_版本变量直到CMAKE 2.6.3才可用,因此您必须至少要求CMAKE 2.6.3才能可靠地使用这种构造

另见:


谢谢您的回答。考虑到我无法控制将编译软件的机器,我必须嵌入FindHDF5.cmake脚本,并在系统上不可用时使用它。对吗?我希望会有一个标准的方法来这样做,而不是有一个如果。。。你说的“如果”是什么意思?不用麻烦,只需将FindXYZ.cmake放入您的项目中,并首先将路径添加到cmake_模块_路径。如果相同的查找文件存在于/usr/share/cmake中,它将被“本地”文件覆盖。如果相同的查找文件存在于/usr/share/cmake中,它将被“本地”文件覆盖。这正是问题所在,因为我希望/usr/share/cmake中的文件是默认文件,只有在/usr/share/cmake中缺少“本地”文件时,才使用“本地”文件。@Barth,为什么不试试“普通”的find_包,检查是否找到了该包。如果没有,请将CMAKE_模块_路径设置为指向,然后再次调用find_包。或者在第二次调用find_包时使用NO_MODULE选项。@Andre谢谢,这是个好主意,我会这么做的。如果你创建了一个新的回复,我会接受它。我想我最终会得到一些条件逻辑,而不是基于1。尝试查找包2。如果失败,请设置cmake_模块_路径并重试。这是安德烈在评论中提出的。这比基于版本的条件-去做要好。如果安德烈提出这样的答案,我甚至会投赞成票。