Что именно делает FindPackageHandleStandardArgs? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь написать модуль поиска для пакета, который я установил.Но у меня возникают проблемы с пониманием функций 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 Ответ

0 голосов
/ 13 октября 2018

Описание 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
    )
...