加载程序包时C ++版本冲突 [英] c++ conflicting versions when loading package

查看:114
本文介绍了加载程序包时C ++版本冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对c++一无所知.我安装了一些名为ITK的软件包的两个版本.由于某些原因,4.8版本在/usr/local/lib/cmake/ITK-4.8/UseITK.cmake中具有其.cmake文件,而在3.16文件中具有/usr/local/itk/lib/InsightToolkit/UseITK.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版本?

解决方案

在找到包之前,检查文件/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(由命令触发)只是将请求重定向到 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文档中找到更多详细信息.. >

I know nothing from c++. I installed two versions of some package called ITK. For some reason, the 4.8 version has its .cmake file in /usr/local/lib/cmake/ITK-4.8/UseITK.cmake and the 3.16 file /usr/local/itk/lib/InsightToolkit/UseITK.cmake.

So now, I am trying to build some project that requires 3.16 version that has in its CMakeLists.txt this :

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

but ${ITK_USE_FILE} is /usr/local/lib/cmake/ITK-4.8/UseITK.cmake. (what I understand is that ITK uses ITK_USE_FILE as Package_INCLUDE_DIR variable). How can I make find_package points to the 3.16 version ?

解决方案

Check that file /usr/local/itk/lib/InsightToolkit/ITKConfig.cmake exists and set ITK_DIR variable to /usr/local/itk/lib/InsightToolkit before finding package:

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

or, if you want your project to work also on other computers, pass this variable to cmake call:

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

(CMakeLists.txt remains unchanged in that case).


According to the sources, FindITK.cmake (triggered with find_package(ITK) command) just redirect request to Config mode:

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

but does not pipe VERSION parameter to it. That's why setting version doesn't work.

Setting ITK_DIR forces CMake to search ITKConfig.cmake firstly under given directory. More details can be found in find_package documentation.

这篇关于加载程序包时C ++版本冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆