我正在尝试为已安装的软件包编写查找模块。但是我在理解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
,文档只说“指定此程序包所需的变量”。对于像我这样的菜鸟来说,这并不能说明什么。
答案 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
)