当前位置: 首页 > news >正文

CMake调用第三方库的两种方法

为了让连接器搜索到库路径,一般有两种方法

  1. link_directories命令
  • 使用步骤
    ## 在add_executable或add_library前引入第三方库
    # 1.引入第三方库,${THIRD_PARTY_PREFIX}为用户定义的第三方库目录
    link_directories(${THIRD_PARTY_PREFIX}/lib)
    # 2.增加第三方库头文件目录
    include_directories(${THIRD_PARTY_PREFIX}/include)
    # 3.给目标增加依赖库(如main)
    target_link_libraries(main PRIVATE freetype)
    
  • 参考资料
    命令介绍
  1. find_library命令
    link_directories命令不需要cmake配置文件,只需要给出库的路径就可以了,使用相对简单,但不适合跨平台项目。而find_library会到类似XxxConfig.cmake 或 xxx-config.cmake 或 FindXxx.cmake文件去找动态库或静态库,如果自己写的库,或者第三方库没有对应的配置文件,需要自己编写对应的cmake config文件,相对于link_directories方法,就有些麻烦。
  • 使用步骤
   # 1.THIRD_PARTY_PREFIX加入到find_package搜索路径set(CMAKE_PREFIX_PATH ${THIRD_PARTY_PREFIX})# 2.搜索freetype库 find_package(freetype REQUIRED)# 3.给目标添加依赖库target_link_libraries(main PRIVATE freetype)
  • 参考资料
    命令介绍
  1. find_package cmake config文件生成方法
include(CMakePackageConfigHelpers)
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmakeVERSION ${PACKAGE_VERSION}COMPATIBILITY SameMajorVersion)install(EXPORT ${PROJECT_NAME}TargetsFILE ${PROJECT_NAME}Targets.cmakeDESTINATION lib/cmake/)configure_package_config_file(cmake/config.cmake.in ${PROJECT_NAME}Config.cmakeINSTALL_DESTINATION lib/cmake/)install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmakeDESTINATION lib/cmake/)
## config.cmake.in文件内容
@PACKAGE_INIT@
# include(CMakeFindDependencyMacro)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
find_dependency(spdlog REQUIRED)
check_required_components("@PROJECT_NAME@")
http://www.lryc.cn/news/145152.html

相关文章:

  • Django基础7——用户认证系统、Session管理、CSRF安全防护机制
  • 基于流计算 Oceanus(Flink) CDC 做好数据集成场景
  • MySQL8.Xx安装控制台未生成随机密码解决方案
  • 安装VS2005时提示:请插入磁盘:visual studio 2005 DVD
  • OpenVINO2023使用简介
  • 基于React实现无限滚动的日历详细教程,附源码【手写日历教程第二篇】
  • 68、使用aws官方的demo和配置aws服务,进行视频流上传播放
  • 数据库
  • 深入了解fcntl函数:Linux系统编程中的文件控制
  • 汇川技术内推码
  • nacos服务器启动报错集合
  • C语言_分支和循环语句(2)
  • JMeter 接口自动化测试:从入门到精通的完全指南
  • 【Java】集合List的toArray()方法及其重载
  • Python学习笔记:Requests库安装、通过url下载文件
  • git pull --rebase 用法
  • react antd框架中的徽标获取数据对应状态的数量
  • 【多线程】Thread类的用法
  • 第八章 贪心算法 part03 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 (day34补)
  • Android Activity启动过程一:从Intent到Activity创建
  • 第9章:聚类
  • 程序员为什么要写bug,不能一次性写好吗?
  • Nginx反向代理其他服务
  • MQ 简介-RabbitMQ
  • 强化学习(2)
  • Visual Studio 2022的MFC框架——theApp全局对象
  • SpringBoot Cache
  • vue 简单实验 自定义组件 component
  • C++ 改善程序的具体做法 学习笔记
  • Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象