cmakelist库依赖库_CMakeLists.txt中常用库文件的查找和链接_ ...

cmakelist库依赖库_CMakeLists.txt中常用库文件的查找和链接_ ...

2023年8月2日发(作者:)

cmakelist库依赖库_中常⽤库⽂件的查找和链接CMake链接库的基本套路在使⽤CMake组织⼯程时,如果我们需要依赖某个库⽂件,需要完成以下步骤:查找库⽂件(find_package命令)判断是否找到库⽂件(XXX_FOUND标记),并包含头⽂件(include_directories命令)链接库⽂件到⽬标(target_link_libraries命令)因此,库⽂件、头⽂件的名字(⼤⼩写)我们就要清楚的写明,不要混淆。我常⽤的库如OpenCV, catkin, Boost, Eigen, glog, gtest等,其⽤法如下。常⽤的变量有: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 COMPONENTSregexgraphchronothreadsystemfilesystemserialization)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 COMPONENTSgeometry_msgsroscpptf)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)EigenEigen⽐较特殊, 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)Eigen的默认安装路径是/usr/local/include/eigen3/Eigen,安装后需要将Eigen⽂件夹移动到/usr/local/include/下,可以执⾏如下语句,请参考下⽅博客。sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/includeubuntu16.04+eigen3安装 - 灰⾊的⽯头 - 博客园g先安装好glog。安装后,⽆需在中 find_package() 和 include_directories(),直接 target_link_libraries()。target_link_libraries(${PROJECT_NAME} glog)记得在使⽤glog的⽂件中包含头⽂件。#includegtest先安装好gtest。安装后,⽆需在中 find_package() 和 include_directories(),直接 target_link_libraries()。FILE(GLOB_RECURSE TEST_SRC "${CMAKE_SOURCE_DIR}/test/*.cpp""${CMAKE_SOURCE_DIR}/test/*.h")add_executable(${PROJECT_NAME}_test${TEST_SRC})target_link_libraries(${PROJECT_NAME}_test gtest ${LINK_LIB_LIST} glog)⼀般测试⽂件夹test会放在⼯程内和 src、include ⽂件夹同级别的位置,在test⽂件夹内存放不同的测试⽂件test cases,并包含头⽂件。具体的请参考gtest的tutorials。#include "gtest/gtest.h"另外,要记得通过main() 运⾏所有的test cases。如下:#include "gtest/gtest.h"int main(int argc,char **argv){testing::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();}CMake 输出信息执⾏Reload CMake Project后的输出信息如下(不同的机器不同的安装路径输出会不⼀样):-- 找到OpenCV:"/opt/ros/kinetic/include/opencv-3.3.1;/opt/ros/kinetic/include/opencv-3.3.1/opencv",ENABLE_OPENCV宏已打开-- 找到OpenCV:"opencv_core;opencv_highgui;opencv_imgproc;opencv_imgcodecs"-- Boost version: 1.58.0-- Found the following Boost libraries:-- regex-- graph-- chrono-- thread-- system-- filesystem-- serialization-- date_time-- atomic-- 找到Boost:"/usr/include",ENABLE_BOOST宏已打开-- 找到Boost:"/usr/lib/x86_64-linux-gnu/libboost_;/usr/lib/x86_64-linux-gnu/libboost_; ... ...-- .......省略........-- 找到catkin:"/home/gjs/catkin_ws/devel/include;/home/gjs/catkin_ws/src/geometry/tf/include; ... ...-- 找到catkin:"/opt/ros/kinetic/lib/;/opt/ros/kinetic/lib/libtf2_; ... ...-- 找到Eigen3:"/usr/include/eigen3",ENABLE_EIGEN3宏已打开对于⾃定义的库,库⽂件和头⽂件的名称可能有所区别。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690908330a460619.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信