Я использую cmake в Windows для сборки RTK, который зависит от ITK, но RTK (который использует find_package ()) не может найти мою установку ITK, хотя я предоставляю ее место установки с ITK_DIR
.
Я собрал ITK отдельно и установил его (используя цель установки cmake) в <...>/ITK/install
.Я вижу, что ITKConfig.cmake
было введено в <...>/ITK/install/lib/cmake/ITK-4.13
.Я вызываю cmake с
> cmake -DITK_DIR=<...>/ITK/install .
В соответствии с документацией find_package () :
[...] CMake создает набор возможных префиксов установкидля упаковки.Под каждым префиксом ищется несколько каталогов для файла конфигурации.В таблицах ниже показаны каталоги, которые искали.Каждая запись предназначена для деревьев установки в соответствии с соглашениями Windows (W), UNIX (U) или Apple (A):
<prefix>/ (W)
<prefix>/(cmake|CMake)/ (W)
<prefix>/<name>*/ (W)
<prefix>/<name>*/(cmake|CMake)/ (W)
<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/ (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/ (U)
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (U)
<prefix>/<name>*/(lib/<arch>|lib|share)/cmake/<name>*/ (W/U)
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/ (W/U)
<prefix>/<name>*/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/ (W/U)
[...] Каталоги, отмеченные выше (W), предназначены для установокв Windows, где префикс может указывать вверху установочного каталога приложения.Помеченные (U) предназначены для установки на платформах UNIX, где префикс используется несколькими пакетами. Это просто соглашение, поэтому все каталоги (W) и (U) все еще ищутся на всех платформах.
Исходя из этой информации, я ожидаю, что find_package ()найти ITKConfig.cmake
.Но это сводится к установке системы ITK, которая у меня есть в C:\Program Files
.Я включил CMAKE_FIND_DEBUG_MODE=ON
и получил следующий вывод из find_package ():
Checking file [C:/<...>/ITK/install/ITKConfig.cmake]
Checking file [C:/<...>/ITK/install/itk-config.cmake]
Checking prefix [C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/]
Checking file [C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/ITKConfig.cmake]
Checking file [C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/itk-config.cmake]
... <more> ...
Он выглядит как ITK_DIR
, но не в подкаталоге lib/cmake/ITK-4.13
, где находится файл ITKConfig.cmake
.
Если я вместо этого укажу на конкретную папку, в которой находится этот файл, например:
> cmake -DITK_DIR=<...>/ITK/install/lib/cmake/ITK-4.13 .
, тогда find_package () найдет ITK и все заработает.
Что я неправильно понимаю?Я бы предпочел не указывать имя версии пакета в переменной ITK_DIR
, поэтому было бы неплохо описать поведение, описанное в документации.