加载包时c ++版本冲突

c++ conflicting versions when loading package

我对c++一无所知。我安装了一些名为 ITK 的软件包的两个版本。由于某种原因,4.8 版本在 /usr/local/lib/cmake/ITK-4.8/UseITK.cmake3.16 文件 /usr/local/itk/lib/InsightToolkit/UseITK.cmake 中有其 .cmake 文件。

所以现在,我正在尝试构建一些需要 3.16 版本的项目,该版本在其 CMakeLists.txt 中包含:

find_package(ITK)
...
include( ${ITK_USE_FILE} )

${ITK_USE_FILE}/usr/local/lib/cmake/ITK-4.8/UseITK.cmake。 (我的理解是 ITK 使用 ITK_USE_FILE 作为 Package_INCLUDE_DIR 变量)。如何让 find_package 指向 3.16 版本?

在 CMake documentation 之后,您可以请求找到特定版本的包。您需要将 CMakeLists.txt 更改为:

find_package(ITK)

至:

find_package(ITK 3.16)

检查文件 /usr/local/itk/lib/InsightToolkit/ITKConfig.cmake 是否存在并在查找包之前将 ITK_DIR 变量设置为 /usr/local/itk/lib/InsightToolkit:

# CMakeLists.txt
...
set(ITK_DIR /usr/local/itk/lib/InsightToolkit)
find_package(ITK)

或者,如果您希望您的项目也能在其他计算机上运行,​​请将此变量传递给 cmake 调用:

cmake -DITK_DIR=/usr/local/itk/lib/InsightToolkit (...)

CMakeLists.txt 在这种情况下保持不变)。


根据消息来源,FindITK.cmake(由 find_package(ITK) 命令触发)只是将请求重定向到 Config 模式:

# FindITK.cmake
...
find_package(ITK ${_ITK_REQUIRED} ${_ITK_QUIET} NO_MODULE
    NAMES ITK InsightToolkit
    CONFIGS ITKConfig.cmake
    )

但不会将 VERSION 参数传递给它。这就是设置版本不起作用的原因。

设置ITK_DIR强制CMake首先在给定目录下搜索ITKConfig.cmake。可以在 find_package documentation.

中找到更多详细信息