青岛网站建设案例,wordpress博客搬家主页404,seo快速收录快速排名,华为云云速建站自定义检测外部库使用pkg-config查找库搜索.pc配置文件cmake函数链接到库自定义find库检测外部库的便捷方法#xff1a;使用CMake自带的find-module使用packageConfig.cmake, packageConfigVersion.cmake和packageTargets.cmake。这些文件由软件商提供…
自定义检测外部库使用pkg-config查找库搜索.pc配置文件cmake函数链接到库自定义find库检测外部库的便捷方法使用CMake自带的find-module使用packageConfig.cmake, packageConfigVersion.cmake和packageTargets.cmake。这些文件由软件商提供并与软件包一起安装在标准位置的cmake文件夹下。
当某个库既没有find-module的查找模块也软件商也不提供打包的cmake文件。
使用pkg-config程序来找系统上的包。这些依赖与软件供应商提供.pc配置文件其中有关于发行包的元数据自己写find-package模块
使用pkg-config查找库
find_package(PkgConfig REQUIRED QUIET)#QUIET找不到库才报错搜索.pc配置文件
通过使用PkgConfig库的pkg_search_module函数搜索附带 包配置.pc文件的库或程序。以ZeroMQ为例
apt-get install libzmq3-dev#安装zeroMQ库该库没有提供findxxx.cmake文件查看安装的内容
rootLAPTOP-Q8TAP9VQ:/usr# find -name *zmq*
./include/zmq.h
./include/zmq.hpp
./include/zmq_addon.hpp
./include/zmq_utils.h
./lib/x86_64-linux-gnu/libzmq.a
./lib/x86_64-linux-gnu/libzmq.so
./lib/x86_64-linux-gnu/libzmq.so.5
./lib/x86_64-linux-gnu/libzmq.so.5.2.4
./lib/x86_64-linux-gnu/pkgconfig/libzmq.pc存在.pc文件可以使用config模式进行查找库
pkg_search_module(ZeroMQREQUIREDlibzeromq libzmq lib0mqIMPORTED_TARGET)其中libzeromq libzmq lib0mq是ZeroMQ库在不同操作系统和包管理器中的不同名称。如此设置可以根据操作系统和包管理器的统统为同一个包选择同一个名称。
cmake函数
当找到pkg-config时, CMake需要提供两个函数来封装这个程序提供的功能:
pkg_check_modules查找传递列表中的所有模块(库和/或程序)pkg_search_module要在传递的列表中找到第一个工作模块
链接到库
target_link_libraries(targetName PkgConfig::ZeroMQ)自定义find库
自己编写findxxx.cmake遵循以下步骤
检查用户是否为所需要的包提供了自定义的位置使用find_家族中的命令搜索所需包的必需组件头文件库可执行程序等。 使用find_path查找头文件完整路径使用find_library查找库其他还有find_file , find_program, find_package 如果搜索成功将结果报错如果搜索失败则会设置为var-NOTFOUND。初步搜索结果中提取版本号。调用调用find_package_handle_standard_args命令。处理find_package命令的REQUIRED、QUIET和版本参数并设置xxx_FOUND变量
编写findxxx.cmake最主要的是查找到库文件的头文件路径和链接库路径。即lib和include路径。除非特定指定了版本或者系统安装了多个版本的库否则查找版本可以不用。找到lib和include基本就能用了