sha*_*WWW 6 cmake cmake-modules
我正在尝试为我已安装的软件包编写查找模块。但我在理解 CMake 函数时遇到了困难。
\n\n这是我的代码片段。
\n\nfind_package(PkgConfig)\npkg_check_modules(PC_zcm QUIET zcm)\n\nfind_path(zcm_INCLUDE_DIR\n NAMES zcm.h\n PATHS $ENV{PATH}\n )\nmark_as_advanced(zcm_FOUND zcm_INCLUDE_DIR)\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(zcm DEFAULT_MSG\n REQUIRED_VARS zcm_INCLUDE_DIR\n )\nRun Code Online (Sandbox Code Playgroud)\n\nfind_path()能够找到我的zcm_INCLUDE_DIR就好了:/usr/bin/zcm/usr/local/include
但 find_package_handle_standard_args() 给出 \n-- Could NOT find zcm (missing: REQUIRED_VARS)
我的目录树如下所示:
\n\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 zcm\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 eventlog.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 json\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 json-forwards.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 json.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 message_tracker.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tools\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 IndexerPlugin.hpp\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 TranscoderPlugin.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 transport\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 generic_serial_transport.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 transport.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 transport_register.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 transport_registrar.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 url.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 util\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Filter.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 zcm-cpp-impl.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 zcm-cpp.hpp\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 zcm.h\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 zcm_coretypes.h\nRun Code Online (Sandbox Code Playgroud)\n\n我的理解是find_package_handle_standard_args()尝试在路径中找到包,这听起来很简单,因为路径已经确定。
至于REQUIRED_VARS文档只是说“指定这个包所需的变量”。对于像我这样的菜鸟来说,这并不能说明什么。
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
)
Run Code Online (Sandbox Code Playgroud)
第二个签名的正确用法:
# By default, the standard error message is used.
find_package_handle_standard_args(zcm REQUIRED_VARS
zcm_INCLUDE_DIR
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9334 次 |
| 最近记录: |