• 编写自定义cmake配置文件FindXXX.cmake或者xxx-config.cmake | cmake with user defined entry


    本文首发于个人博客https://kezunlin.me/post/12ab5707/,欢迎阅读!

    cmake with user defined entry

    Guide

    • FindXXX.cmake in CMAKE_MODULE_PATH
    • xxx-config.cmake in CMAKE_PREFIX_PATH

    cmake default package

    FindXXX.cmake

    use find_package to find default package with name XXX

    and cmake file C:Program FilesCMakesharecmake-3.10ModulesFindXXX.cmake

    use ${XXX_INCLUDE_DIRS} in include, and ${XXX_LIBRARIES} in libraries

    usage

    find_package(GTest REQUIRED)
    include_directories(${GTEST_INCLUDE_DIRS})
    
    find_package(Boost 1.5.8 REQUIRED COMPONENTS date_time system filesystem)
    include_directories(${Boost_INCLUDE_DIRS})
    
    target_link_libraries(demo ${GTEST_LIBRARIES} ${Boost_LIBRARIES})
    

    user-define package

    xxx-config.cmake

    both names are ok.

    • xxx-config.cmake
    • XXXConfig.cmake, e.g. OpenCVConfig.cmake

    mysqlcppconn-config.cmake

    # Name: <Name>Config.cmake  or <lower name>-config.cmake
    # mysqlcppconn-config.cmake or MYSQLCPPCONNConfig.cmake  
    # similar to OpenCVConfig.cmake   
    
    # Tips for MYSQLCPPCONN_ROOT_DIR
    # use "C:/Program Files/MySQL/Connector.C++ 1.1", otherwise cmake-gui can not auto find include and library
    
    set(MYSQLCPPCONN_FOUND TRUE) # auto 
    set(MYSQLCPPCONN_ROOT_DIR "C:/Program Files/MySQL/Connector.C++ 1.1")
    
    find_path(MYSQLCPPCONN_INCLUDE_DIR NAMES cppconn/driver.h PATHS "${MYSQLCPPCONN_ROOT_DIR}/include") 
    mark_as_advanced(MYSQLCPPCONN_INCLUDE_DIR) # show entry in cmake-gui
    
    find_library(MYSQLCPPCONN_LIBRARY NAMES mysqlcppconn.lib PATHS "${MYSQLCPPCONN_ROOT_DIR}/lib/opt") 
    mark_as_advanced(MYSQLCPPCONN_LIBRARY) # show entry in cmake-gui
    
    # use xxx_INCLUDE_DIRS and xxx_LIBRARIES in CMakeLists.txt
    set(MYSQLCPPCONN_INCLUDE_DIRS ${MYSQLCPPCONN_INCLUDE_DIR} )
    set(MYSQLCPPCONN_LIBRARIES ${MYSQLCPPCONN_LIBRARY} )
    
    # cmake entry will be saved to build/CMakeCache.txt 
    
    message( "mysqlcppconn-config.cmake " ${MYSQLCPPCONN_ROOT_DIR})
    

    halcon-config.cmake

    # halcon-config.cmake or HALCONConfig.cmake  
    
    set(HALCON_FOUND TRUE) # auto 
    set(HALCON_ROOT_DIR E:/git/car/windows/lib/halcon)
    
    find_path(HALCON_INCLUDE_DIR NAMES halconcpp/HalconCpp.h PATHS "${HALCON_ROOT_DIR}/include") 
    mark_as_advanced(HALCON_INCLUDE_DIR) # show entry in cmake-gui
    
    find_library(HALCON_LIBRARY NAMES halconcpp.lib PATHS "${HALCON_ROOT_DIR}/lib/x64-win64") 
    mark_as_advanced(HALCON_LIBRARY) # show entry in cmake-gui
    
    # use xxx_INCLUDE_DIRS and xxx_LIBRARIES in CMakeLists.txt
    set(HALCON_INCLUDE_DIRS ${HALCON_INCLUDE_DIR} )
    set(HALCON_LIBRARIES ${HALCON_LIBRARY} )
    
    message( "halcon-config.cmake " ${HALCON_ROOT_DIR})
    
    

    usage

    find_package(HALCON REQUIRED) # user-defined
    include_directories(${HALCON_INCLUDE_DIRS})
    
    find_package(MYSQLCPPCONN REQUIRED) # user-defined
    include_directories(${MYSQLCPPCONN_INCLUDE_DIRS})
    
    target_link_libraries(demo ${HALCON_LIBRARIES} ${MYSQLCPPCONN_LIBRARIES})
    

    cmake-gui entry

    start cmake-gui, and at first,we should set

    • HALCON_DIR = E:/git/car/share/cmake-3.10/Modules
    • MYSQLCPPCONN_DIR = E:/git/car/share/cmake-3.10/Modules

    then configure

    • HALCON_INCLUDE_DIR and HALCON_LIBRARY will be found.
    • MYSQLCPPCONN_INCLUDE_DIR and MYSQLCPPCONN_LIBRARY will be found.

    cmake-gui user defined entry

    Reference

    History

    • 20180122: created.

    Copyright

  • 相关阅读:
    8天学通MongoDB(实际操作版)——第九天 构建学习型部署环境
    构建Ubuntu Server试验环境
    8天学通MongoDB(实际操作版)——第一天 基础入门
    《JAVA与模式》之适配器模式
    wsdl
    Axis2 Fault: Transport out has not been set
    诺基亚E63常见设置指南
    java面试题总结
    R400 安装XP后 ati2dvag蓝屏解决办法
    深入理解Java多态性
  • 原文地址:https://www.cnblogs.com/kezunlin/p/11840196.html
Copyright © 2020-2023  润新知