【问题标题】:ITK: Cannot find ITKConfig.cmakeITK:找不到 ITKConfig.cmake
【发布时间】:2019-06-23 10:42:16
【问题描述】:

我一直在尝试在新 PC 上设置 ITK,但当我在项目上运行 CMake 时遇到了问题。

我下载了 ITK 4.8.2,解压它,用 CMake 配置并像往常一样生成。但是,这一次 CMake 发出以下错误:

CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindITK.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "ITK", but
  CMake did not find one.

  Could not find a package configuration file provided by "ITK" with any of
  the following names:

    ITKConfig.cmake
    itk-config.cmake

  Add the installation prefix of "ITK" to CMAKE_PREFIX_PATH or set "ITK_DIR"
  to a directory containing one of the above files.  If "ITK" provides a
  separate development package or SDK, be sure it has been installed.

-- Configuring incomplete, errors occurred!

CMakeLists.txt 文件非常棒,只是试图确保正确设置 cmake/ITK:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(ITKTest)

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

add_executable(ITKTest main.cpp)

target_link_libraries(ITKTest ${ITK_LIBRARIES})

我添加了CMAKE_PREFIX_PATHITK_DIR 作为附加条目,后者指向ITK 文件夹的位置。但问题依然存在。

至于它说找不到的文件,一个存在于我设置 cmake 以构建二进制文件的文件夹中。就我而言,两个目录中有两个文件:

--E:\ITK\InsightToolkit-4.8.2-build\ITKConfig.cmake
--E:\ITK\InsightToolkit-4.8.2-build\CMakeFiles\ITKConfig.cmake

【问题讨论】:

  • 您确定 FindITK.cmake 存在于您的模块目录中吗?我没有 Windows 机器 ATM,但在 Ubuntu 上的模块位于 /cmake-root/Modules 下。
  • find_package() 的搜索算法在documentation 中有完整描述。尝试在CMakeFiles 下将ITK_DIR 设置为E:\\ITK\\InsightToolkit-4.8.2-build (\` should be interpreted by CMake as single backslash). Two things looks suspicious for me: 1. running cmake CMakeLists.txt. Normally, argument for cmake is source directory, not a script file itself. And it is better to perform out-of-source builds. 2. Having second ITKConfig.cmake`。看起来同一目录已被用作build为 ITK 安装一个
  • @siavashk 刚刚查了一下,不,FindITK.cmake 不在 Modules 目录中。
  • @Tsyvarev 在上面的示例中,我正在运行 CMakeLists.txt 来创建一个 HelloWorld 项目,以验证 ITK 是否配置正确。我将 ITK_DIR 设置为您建议的路径,但是在尝试创建该测试项目时仍然遇到相同的错误。至于目录,源和构建位于单独的子文件夹中(即 E:\ITK\InsightToolkit-4.8.2\ 和 E:\ITK|InsightToolkit-4.8.2-build\ )。
  • ` 至于目录,源和构建位于不同的子文件夹中` - 您也需要单独的 buildinstall 子文件夹。

标签: cmake itk


【解决方案1】:

文件 FindITK.cmake 在 CMake 3.0 中被删除。

FindITK
该模块已不存在。

该模块存在于 3.1 之前的 CMake 版本中,但仅 find_package(ITK NO_MODULE) 周围的薄包装,以提供 与使用过时约定的项目的兼容性。现在 find_package(ITK) 会直接搜索ITKConfig.cmake

来源:https://cmake.org/cmake/help/v3.4/module/FindITK.html

因此,CMake 会查找 ITKConfig.cmake,它必须安装到默认位置,或者您必须将 ITKConfig.cmake 的路径添加到 CMAKE_PREFIX_PATH

【讨论】:

  • 感谢您提供的信息。在这里澄清一下,ITKConfig.cmake 的默认位置是什么?我拥有的文件位于使用 cmake 构建 ITK 的目录中。
  • 如果您构建和安装 ITK,它将选择默认位置。不知道这意味着什么,例如对于 Windows。当你不安装它时,你必须将正确的路径添加到你的CMAKE_PRFIX_PATH,这是我通常选择的方式。也许使用一些shell脚本来调用cmake。
【解决方案2】:

我找到了成功构建测试项目(以及我目前正在处理的另一个项目)的方法。我在构建项目时指定了 ITK 构建文件夹的位置作为参数:

cmake -DITK_DIR=E:/ITK/Insight-Toolkit-4.8.2 CMakeLists.txt

我仍然不确定为什么我以前从未这样做过,以及为什么 ITK_DIR 变量在我在 cmake GUI 中配置 ITK 后不会持续存在,但这确实让我能够构建项目。

【讨论】:

    【解决方案3】:

    这些或其他风格都不适合我,好像 ITK_DIR 从未被定义:

    cmake -DITK_DIR=C:\Users\user\InsightToolkit-5.0.0_bld C:\Users\user\HelloWorldITK cmake
    -DITK_DIR=C:\\Users\\user\\InsightToolkit-5.0.0_bld C:\Users\user\HelloWorldITK cmake
    -DITK_DIR=C:/Users/user/InsightToolkit-5.0.0_bld C:\Users\user\HelloWorldITK
    

    但是,将其添加到 CMakeLists.txt 解决了问题:

    SET(ITK_DIR "C:\\Users\\user\\InsightToolkit-5.0.0_bld")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2013-05-18
      • 2014-12-20
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多