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

项目中经常要使用到第三方库,在链接时,为了让链接器能搜索到库,一般有两种方法,一是通过link_directories命令增加链接的库路径;二是通过find_library命令方法。

  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.cmake
  VERSION ${PACKAGE_VERSION}
  COMPATIBILITY SameMajorVersion)

install(
    EXPORT ${PROJECT_NAME}Targets
    FILE ${PROJECT_NAME}Targets.cmake
    DESTINATION lib/cmake/)

configure_package_config_file(
    cmake/config.cmake.in ${PROJECT_NAME}Config.cmake
    INSTALL_DESTINATION lib/cmake/)

install(
  FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
        ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
        DESTINATION 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@")
CMake中安装第三方库有多种方法。一种常见的方法是使用find_package命令。这个命令可以用来查找和引入系统已经安装的库。您可以在CMakeLists.txt文件中使用find_package命令,并指定您要引入的库的名称。CMake会根据您的系统配置自动查找这个库,并将其引入到您的项目中。这种方法的优点是简单方便,不需要手动下载和设置库的构建过程。 另一种方法是使用include(FetchContent)命令。这个命令允许您从指定的URL或Git存储库中提取第三方库,并将其作为CMake项目的子目录构建。使用FetchContent命令时,您无需手动下载、解压缩或设置外部库的构建过程,CMake会自动执行这些任务。这种方法的优点是它使得引入第三方库更加方便,并且使得与外部库的集成更加简单。同时,使用FetchContent命令时,您可以很容易地在您的CMake项目中指定外部库的版本和源代码位置。 另外,对于Android开发,您可以使用NDK-Build编译出各平台的so文件,然后将这些文件引入到您的CMake项目中。这种方法适用于调用第三方库的场景。您可以在CMakeLists.txt文件中使用add_library命令,将这些so文件添加到您的项目中。 综上所述,安装第三方库方法包括使用find_package命令、include(FetchContent)命令和使用NDK-Build编译出so文件。您可以根据您的具体需求和项目情况选择适合的方法来安装第三方库。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabinSong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值