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)
。但是答案中的代码是不同的。@Tsyvarevfind_包(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)
。但是答案中的代码是不同的。@Tsyvarevfind_包(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
。现在我有一堆小薇