CMakeLists.txt链接库的基本套路

CMakeLists.txt链接库的基本套路

在使用CMake组织工程时,如果我们需要依赖某个库文件,需要完成以下步骤:

  1. 查找库文件(find_package命令)
  2. 判断是否找到库文件(XXX_FOUND标记),并包含头文件(include_directories命令)
  3. 链接库文件到目标(target_link_libraries命令)
    因此,库文件、头文件的名字(大小写)我们就要清楚的写明,不要混淆。我常用的库如OpenCV, catkin, Boost, Eigen等,其用法如下。常用的变量有:name_INCLUDE_DIRS, name_INCLUDE_DIR, NAME_INCLUDE_DIRS, NAME_INCLUDE_DIR; name_LIBS, NAME_LIBS, name_LIBRARIES, NAME_LIBRARIES等。

OpenCV

#查找OpenCV是否安装
find_package(OpenCV REQUIRED core highgui imgproc imgcodecs)
if (OPENCV_FOUND)
    message(STATUS "找到OpenCV:\"${OpenCV_INCLUDE_DIRS}\",ENABLE_OPENCV宏已打开")
    message(STATUS "找到OpenCV:\"${OpenCV_LIBS}\"")
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_definitions(-DENABLE_OPENCV)
    list(APPEND LINK_LIB_LIST ${OpenCV_LIBS})
endif (OPENCV_FOUND)

Boost

#查找Boost是否安装
find_package(Boost REQUIRED COMPONENTS
        regex
        graph
        chrono
        thread
        system
        filesystem
        serialization)
if (Boost_FOUND)
    message(STATUS "找到Boost:\"${Boost_INCLUDE_DIRS}\",ENABLE_BOOST宏已打开")
    message(STATUS "找到Boost:\"${Boost_LIBRARIES}\"")
    include_directories(${Boost_INCLUDE_DIRS})
    add_definitions(-DENABLE_BOOST)
    list(APPEND LINK_LIB_LIST ${Boost_LIBRARIES})
endif (Boost_FOUND)

ROS catkin

#查找catkin是否安装
find_package(catkin REQUIRED COMPONENTS
        geometry_msgs
        roscpp
        tf
        )
if (catkin_FOUND)
    message(STATUS "找到catkin:\"${catkin_INCLUDE_DIRS}\",ENABLE_CATKIN宏已打开")
    message(STATUS "找到catkin:\"${catkin_LIBRARIES}\"")
    include_directories(${catkin_INCLUDE_DIRS})
    add_definitions(-DENABLE_CATKIN)
    list(APPEND LINK_LIB_LIST ${catkin_LIBRARIES})
endif (catkin_FOUND)

Eigen

Eigen比较特殊, Eigen采用源码的方式提供给用户使用,在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式,是因为Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用。

#查找Eigen3是否安装
find_package(Eigen3 REQUIRED)
if (EIGEN3_FOUND)
    message(STATUS "找到Eigen3:\"${EIGEN3_INCLUDE_DIR}\",ENABLE_EIGEN3宏已打开")
    include_directories(${EIGEN3_INCLUDE_DIR})
    add_definitions(-DENABLE_EIGEN3)
#     list(APPEND LINK_LIB_LIST ${EIGEN3_LIBRARIES})
endif (EIGEN3_FOUND)

参考博客https://zhuanlan.zhihu.com/p/73373016

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值