FindPackageHandleStandardArgs到底做什么?

时间:2018-10-12 18:24:44

标签: cmake cmake-modules

我正在尝试为已安装的软件包编写查找模块。但是我在理解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 :(得分:0)

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
    )