前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake:用于查找libjpeg-turbo的module FindTurboJPEG.cmake

cmake:用于查找libjpeg-turbo的module FindTurboJPEG.cmake

作者头像
10km
发布2019-05-25 21:50:45
1.3K0
发布2019-05-25 21:50:45
举报
文章被收录于专栏:10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433557

libjpeg-turbo的安装包没有提供用于CONFIG模式查找包(find_package)的cmake脚本,如果cmake脚本中要查找libjpeg-turbo库,就得自己写脚本。

于是我参照cmake 查找标准libjpeg库 的Module FindJPEG源码的写法实现了libjpeg-turbo的Module FindTurboJPEG.cmake。

为了更方便引用libjpeg-turbo,module中不仅提供了传统的变量方式TURBOJPEG_INCLUDE_DIRTURBOJPEG_LIBRARY提供libjpeg-turbo的信息,还提供import target:turbojpep,turbojpeg-static

代码语言:javascript
复制
# 通过查找turbojpeg.h定位libjpeg-turbo的include文件夹位置
find_path(TURBOJPEG_INCLUDE_DIR turbojpeg.h)

set(TURBOJPEG_NAMES ${TURBOJPEG_NAMES} turbojpeg libturbojpeg)
find_library(TURBOJPEG_LIBRARY NAMES ${TURBOJPEG_NAMES} )

# handle the QUIETLY and REQUIRED arguments and set TURBOJPEG_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TURBOJPEG DEFAULT_MSG TURBOJPEG_LIBRARY TURBOJPEG_INCLUDE_DIR)

if(TURBOJPEG_FOUND)
    # for compatility of find_dependency
    set (TurboJPEG_FOUND TRUE)
    # Create imported target turbojpeg
    add_library(turbojpep SHARED IMPORTED)
    # import target中指定include文件夹
    set_target_properties(turbojpep PROPERTIES
      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
      INTERFACE_INCLUDE_DIRECTORIES "${TURBOJPEG_INCLUDE_DIR}"
      IMPORTED_LOCATION "${TURBOJPEG_LIBRARY}"
      )
    if(MSVC)
        set(_stati_library_name ${CMAKE_STATIC_LIBRARY_PREFIX}turbojpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX})
    else()
        set(_stati_library_name ${CMAKE_STATIC_LIBRARY_PREFIX}turbojpeg${CMAKE_STATIC_LIBRARY_SUFFIX})
    endif()
    # 查找libjpeg-turbo静态库
    find_library(TURBOJPEG_LIBRARY_STATIC ${_stati_library_name})
    # 如果找到静态库,则创建turbojpeg-static target
    if(TURBOJPEG_LIBRARY_STATIC)
        # Create imported target turbojpeg-static
        add_library(turbojpeg-static STATIC IMPORTED)
        # import target中指定include文件夹
        set_target_properties(turbojpeg-static PROPERTIES
          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
          INTERFACE_INCLUDE_DIRECTORIES "${TURBOJPEG_INCLUDE_DIR}"
          IMPORTED_LOCATION "${TURBOJPEG_LIBRARY_STATIC}"
          )
        message(STATUS "TURBOJPEG_LIBRARY_STATIC=${TURBOJPEG_LIBRARY_STATIC}")
    else()
        message(STATUS "NOT FOUND jpeg-turbo static library")
    endif()

    unset(_stati_library_name)
endif()

mark_as_advanced(TURBOJPEG_LIBRARY TURBOJPEG_INCLUDE_DIR )

import target引用示例:

代码语言:javascript
复制
# 需要将FindTurboJPEG.cmake的位置加入CMAKE_PREFIX_PATH,cmake才能找到
find_package(TurboJPEG REQUIRED)
## 优先使用静态库
if(TARGET turbojpeg-static)
    set (_turbojpeg_target "turbojpeg-static")
else()
    set (_turbojpeg_target "turbojpeg")
endif()
# 因为import target已经包含了libjpeg-turbo的include信息,
# 所以会自动传递被引入的项目mytarget,所以mytarget 不必再单独添加include_directories
target_link_libraries(mytarget ${_turbojpeg_target})

FindTurboJPEG.cmake应用的完整示例参见:

https://gitee.com/l0km/jpegwrapper/blob/master/jpegwrapper/CMakeLists.txt

FindTurboJPEG.cmake源码的gitee仓库存储位置:

https://gitee.com/l0km/jpegwrapper/blob/master/cmake/Modules/FindTurboJPEG.cmake

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档