加载包时c ++冲突的版本

时间:2015-09-03 22:22:17

标签: cmake package vtk itk

我对c++一无所知。我安装了一些名为ITK的软件包的两个版本。出于某种原因,4.8版本在.cmake/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_USE_FILE}/usr/local/lib/cmake/ITK-4.8/UseITK.cmake。 (据我所知,ITK使用ITK_USE_FILE作为Package_INCLUDE_DIR变量。如何将find_package指向3.16版本?

2 个答案:

答案 0 :(得分:2)

检查文件/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)命令触发)只需将请求重定向到配置模式:

# 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

答案 1 :(得分:1)

在CMake documentation之后,您可以请求找到特定版本的软件包。您需要更改edit_calendar_post_path(@calendar, post)

var value = 0xFFFF; 
value = Convert.ToString(Convert.ToInt32(value.ToString(), 16), 2);
Console.WriteLine(value);
// 1100101010100110101

为:

CMakeLists.txt