加载程序包时C ++版本冲突 [英] c++ conflicting versions when loading package
问题描述
我对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
(由
# 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屋!