Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake c++;加载包时版本冲突_Cmake_Package_Vtk_Itk - Fatal编程技术网

Cmake c++;加载包时版本冲突

Cmake c++;加载包时版本冲突,cmake,package,vtk,itk,Cmake,Package,Vtk,Itk,我对c++一无所知。我安装了两个名为ITK的软件包版本。出于某种原因,4.8版本在/usr/local/lib/cmake/ITK-4.8/UseITK.cmake和3.16文件/usr/local/ITK/lib/InsightToolkit/UseITK.cmake 所以现在,我正在尝试构建一些需要3.16版本的项目,该版本的CMakeLists.txt中包含以下内容: find_package(ITK) ... include( ${ITK_USE_FILE} ) 但是${ITK\u U

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

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

find_package(ITK)
...
include( ${ITK_USE_FILE} )
但是
${ITK\u USE\u FILE}
/usr/local/lib/cmake/ITK-4.8/UseITK.cmake
。 (据我所知,ITK使用
ITK\u USE\u FILE
作为
Package\u INCLUDE\u DIR
变量)。如何使
find\u包
指向
3.16
版本?

在CMake之后,您可以请求查找包的特定版本。您需要从以下位置更改
CMakeLists.txt

find_package(ITK)
致:

在CMake之后,您可以请求找到包的特定版本。您需要从以下位置更改
CMakeLists.txt

find_package(ITK)
致:


在查找包之前,检查文件
/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
call:

cmake -DITK_DIR=/usr/local/itk/lib/InsightToolkit (...)
CMakeLists.txt
在这种情况下保持不变)


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

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


设置
ITK_DIR
强制CMake首先在给定目录下搜索
ITKConfig.CMake
。更多详细信息请参见。

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

# CMakeLists.txt
...
set(ITK_DIR /usr/local/itk/lib/InsightToolkit)
find_package(ITK)
或者,如果希望项目也在其他计算机上运行,请将此变量传递给
cmake
call:

cmake -DITK_DIR=/usr/local/itk/lib/InsightToolkit (...)
CMakeLists.txt
在这种情况下保持不变)


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

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


设置
ITK_DIR
强制CMake首先在给定目录下搜索
ITKConfig.CMake
。更多详细信息可以在中找到。

这不起作用,因为当我安装3.16版本时,我没有得到任何带有
3.16标签的目录。当我重新加载
CMakeLists.txt
时,我收到一条消息
警告:通过在cmake_模块_路径中不提供“Find3.16.cmake”,此项目已要求cmake找到由“3.16”提供的包配置文件,但cmake没有找到。找不到“3.16”提供的具有以下任何名称的包配置文件:3.16Config.cmake 3.16-config.cmake
@Newben,根据错误消息,您正在尝试查找名为“3.16”的包,如
查找包(3.16)
。但是答案中的代码是不同的。@Tsyvarev
find_包(ITK 3.16)
不起作用。我尝试了这个
集合(ITK\u USE\u FILE)/usr/local/ITK/lib/InsightToolkit/UseITK.cmake)集合(ITK\u INSTALL\u PREFIX)/usr/local/ITK)
,这有助于加载“CMakeLists.txt”但是,当我编译代码时,我发现文件没有找到,尽管在
ITK\u INSTALL\u PREFIX
下有,但这不起作用,因为当我安装3.16版本时,我没有得到任何带有
3.16标记的目录。当我重新加载
CMakeLists.txt
时,我收到一条消息
警告:通过在cmake_模块_路径中不提供“Find3.16.cmake”,此项目已要求cmake找到由“3.16”提供的包配置文件,但cmake没有找到。找不到“3.16”提供的具有以下任何名称的包配置文件:3.16Config.cmake 3.16-config.cmake
@Newben,根据错误消息,您正在尝试查找名为“3.16”的包,如
查找包(3.16)
。但是答案中的代码是不同的。@Tsyvarev
find_包(ITK 3.16)
不起作用。我尝试了这个
set(ITK\u USE\u FILE)/usr/local/ITK/lib/InsightToolkit/UseITK.cmake)集(ITK\u INSTALL\u PREFIX)/usr/local/ITK”)
,这有助于加载“CMakeLists.txt”,但当我编译代码时,我得到的文件找不到,尽管
ITK\u INSTALL\u PREFIX
下有。你是说设置
cmake-DITK_DIR=
需要重新编译
ITK
。还是我的项目需要
ITK
?顺便说一句,是否可以在
CMakeLists.txt
中设置此
ITK_DIR
?这是项目需要ITK的参数。是的,您可以在CMakeLists.txt中设置变量:
set(ITK\u DIR/use/local/ITK)
。顺便说一句,你的意思是“我几乎什么都不知道从
CMake
”?这是CMake的详细信息,而不是C++。我在代码< > FIDHORACK包(ITK)< /C>之前设置<代码>(ITKJIDIR)//SUB/ITK > JSUT,然后<代码> $ITKUIXYFILE文件> <代码>仍然指向错误的版本<代码> /Ur/Prime/LIb/CuSt/ITK-4.8/USEITK。我错了吗?文件
/usr/local/itk/lib/InsightToolkit/ITKConfig.cmake
确实存在吗?是否执行干净配置(使用空生成目录)?
CMAKE\u PREFIX\u PATH
变量是否未设置?(您可以通过
message()
命令检查其值)。顺便说一句,使用绝对路径设置'ITK\u USE\u FILE'和
ITK\u INSTALL\u前缀
似乎可以正确加载
CMakeLists.txt
。现在我有一堆小薇