Что именно делает FindPackageHandleStandardArgs?
Я пытаюсь написать модуль поиска для пакета, который я установил. Но у меня возникают проблемы с пониманием функций CMake.
Вот фрагмент моего кода.
find_package(PkgConfig)
pkg_check_modules(PC_zcm QUIET zcm)
find_path(zcm_INCLUDE_DIR
NAMES zcm.h
PATHS $ENV{PATH}
)
mark_as_advanced(zcm_FOUND zcm_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(zcm DEFAULT_MSG
REQUIRED_VARS zcm_INCLUDE_DIR
)
find_path()
может найти мой zcm_INCLUDE_DIR
просто хорошо: /usr/bin/zcm/usr/local/include
Но find_package_handle_standard_args() дает -- Could NOT find zcm (missing: REQUIRED_VARS)
Мое дерево каталогов выглядит так:
└── zcm
├── eventlog.h
├── json
│ ├── json-forwards.h
│ └── json.h
├── message_tracker.hpp
├── tools
│ ├── IndexerPlugin.hpp
│ └── TranscoderPlugin.hpp
├── transport
│ └── generic_serial_transport.h
├── transport.h
├── transport_register.hpp
├── transport_registrar.h
├── url.h
├── util
│ └── Filter.hpp
├── zcm-cpp-impl.hpp
├── zcm-cpp.hpp
├── zcm.h
└── zcm_coretypes.h
Мое понимание find_package_handle_standard_args()
пытается найти пакет по пути, который звучит так, как если бы он был уже определен.
Что касается REQUIRED_VARS
Документы просто говорят "Укажите переменные, которые требуются для этого пакета". Который мало что говорит для такого новичка, как я.
1 ответ
Описание записей find_package_handle_standard_args о двух сигнатурах данной функции, одна из которых принимает DEFAULT_MSG
вариант и другой принимает REQUIRED_VARS
вариант.
Вы пытаетесь смешать эти подписи, и это неправильно.
Правильное использование первой подписи:
# Everything after DEFAULT_MSG is treated as required variable.
find_package_handle_standard_args(zcm DEFAULT_MSG
zcm_INCLUDE_DIR
)
Правильное использование второй подписи:
# By default, the standard error message is used.
find_package_handle_standard_args(zcm REQUIRED_VARS
zcm_INCLUDE_DIR
)