1、所管理第三方库版本
第三方库名称:
1> ceres ==> 1.14.0
2> eigen ==> 3.3.5
3> g2o ==> ??
4> opencv ==> 3.4.0
5> pangolin ==> 0.5.0
6> sophus ==> 1.0.0
第三方库需要的系统依赖:
1> atlas ==> 3.10.2
2> blas ==> 3.6.0
3> gflags ==> 2.1.2
4> glog ==> 0.3.4
5> lapack ==> 3.6.0
6> suitesparse ==> 4.4.6
7> gtest ==> 1.7.0
2、管理工程结构
3、CMakeList文件介绍
项目工程有三个CMakeList文件:
第一个是slam_library/slam_library.cmake,主要内容如下:
导入第三方库文件:
#第三方库文件夹
set(THIRD_PARTY_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty)
set(SLAM_LIBS)
设置第三方库名称:
set(SLAM_ceres ${THIRD_PARTY_DIR}/ceres-1.14.0)
set(SLAM_eigen ${THIRD_PARTY_DIR}/eigen-3.3.5)
set(SLAM_opencv ${THIRD_PARTY_DIR}/opencv-3.4.0)
set(SLAM_pangolin ${THIRD_PARTY_DIR}/pangolin-0.5.0)
初始化宏:
macro(init)
if(BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
else(BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
endif(BUILD_TYPE)
add_compile_options(-std=c++11)
add_definitions(-DCOMPILEDWITHC11)
add_definitions(-DEIGEN_DONT_VECTORIZE -DEIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -fPIC -Wextra -std=c++17 -rdynamic -w")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
### 设置OUTPUT路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/bin/${CMAKE_SYSTEM_PROCESSOR})
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/lib/${CMAKE_SYSTEM_PROCESSOR}/${PROJECT_NAME})
set(INCLUDE_INSTALL_PATH ${PROJECT_SOURCE_DIR}/Release/include/${PROJECT_NAME})
endmacro()
将每个第三方库都定义为一个宏,方便随后调用:
#IMPORT MACROS
macro(SLAM_IMPORT ARG1)
include_directories(${ARG1}/include)
link_directories(${ARG1}/lib)
endmacro()
#google
macro(slam_import_glog)
SLAM_IMPORT(${SLAM_glog})
SLAM_IMPORT(${SLAM_gflags})
set(Google_LIBS glog gflags)
endmacro()
第二个是test_3rdparty/CMakeLists.txt,主要内容如下:
将第一个CMake文件导入(注意路径):
include(${PROJECT_SOURCE_DIR}/../slam_library/slam_library.cmake)
将第一个CMake文件中各个第三方库的宏导入:
init()
slam_import_eigen()
slam_import_opencv()
slam_import_ceres()
slam_import_pangolin()
slam_import_g2o()
slam_import_sophus()
添加子文件:
add_subdirectory(app)
第三个是test_3rdparty/app/CMakeLists.txt,主要内容如下:
add_executable(test_eigen test_eigen.cpp)
add_executable(test_opencv test_opencv.cpp)
target_link_libraries(test_opencv ${OpenCV_LIBS})
add_executable(test_ceres test_ceres.cpp)
target_link_libraries(test_ceres ${SLAM_LIBS} ${OpenCV_LIBS})
add_executable(test_pangolin test_pangolin.cpp)
target_link_libraries(test_pangolin ${Pangolin_LIBS})
add_executable(test_g2o test_g2o.cpp)
target_link_libraries(test_g2o ${G2O_LIBS} ${OpenCV_LIBS})
add_executable(test_sophus test_sophus.cpp)
target_link_libraries(test_sophus)
4、制作可移植性第三方库
在平时的第三方库编译安装的常用方法是使用cmake进行安装,安装结束后会显示其在系统中的位置,比如安装opencv:
搜索usr/local/lib文件下opencv相关的全部库
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务