use_mrpt_as_libs - yuhannah/skills_map GitHub Wiki
使用MRPT作为三方库
1.下载MRPT源码
2.修改MRPT两个cmake文件
1.script_create_MRPTConfig.cmake
该文件产生MRPTConfig.cmake文件,定义了MRPT的源文件路径、头文件路径、二进制文件路径、配置文件路径等。
最前面是默认值。
随后分WIN和UNIX。
UNIX又分默认安装和自定义安装。
本例属于自定义安装。需要在cmake命令后添加自定义安装目录CMAKE_INSTALL_PREFIX。
SET(THE_MRPT_SOURCE_DIR "${MRPT_SOURCE_DIR}")
SET(THE_MRPT_LIBS_INCL_DIR "${THE_MRPT_SOURCE_DIR}/libs")
SET(THE_CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "${MRPT_CONFIG_FILE_INCLUDE_DIR}")
message(===================)
message(STATUS "THE_MRPT_SOURCE_DIR = ${THE_MRPT_SOURCE_DIR}")
message(STATUS "THE_CMAKE_BINARY_DIR = ${THE_CMAKE_BINARY_DIR}")
message(STATUS "THE_MRPT_CONFIG_FILE_INCLUDE_DIR = ${THE_MRPT_CONFIG_FILE_INCLUDE_DIR}")
message(STATUS "THE_MRPT_LIBS_INCL_DIR = ${THE_MRPT_LIBS_INCL_DIR}")
//...
SET(MRPT_CONFIGFILE_IS_INSTALL 1)
IF(WIN32)
SET(THE_MRPT_SOURCE_DIR "\${THIS_MRPT_CONFIG_PATH}")
SET(THE_MRPT_LIBS_INCL_DIR "${THE_MRPT_SOURCE_DIR}/libs")
SET(THE_CMAKE_BINARY_DIR "\${THIS_MRPT_CONFIG_PATH}")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "\${THIS_MRPT_CONFIG_PATH}/include/mrpt/mrpt-config/")
ELSE(WIN32)
# Unix install. This .cmake file will end up in /usr/share/mrpt/MRPTConfig.cmake :
IF (CMAKE_MRPT_USE_DEB_POSTFIXS)
# We're building a .deb package: DESTDIR is NOT the final installation directory:
SET(THE_MRPT_SOURCE_DIR "/usr")
SET(THE_MRPT_LIBS_INCL_DIR "${THE_MRPT_SOURCE_DIR}/include/mrpt")
SET(THE_CMAKE_BINARY_DIR "/usr")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "/usr/include/mrpt/mrpt-config/")
ELSE(CMAKE_MRPT_USE_DEB_POSTFIXS)
# Normal case: take the desired installation directory
# SET(THE_MRPT_SOURCE_DIR "${CMAKE_INSTALL_PREFIX}")
SET(THE_MRPT_SOURCE_DIR "${THE_MRPT_SOURCE_DIR}")
# SET(THE_MRPT_LIBS_INCL_DIR "${THE_MRPT_SOURCE_DIR}/include/mrpt")
SET(THE_MRPT_LIBS_INCL_DIR "${THE_MRPT_SOURCE_DIR}/libs")
SET(THE_CMAKE_BINARY_DIR "${CMAKE_INSTALL_PREFIX}")
# SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include/mrpt/mrpt-config/")
SET(THE_MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include/mrpt-config/unix")
ENDIF(CMAKE_MRPT_USE_DEB_POSTFIXS)
ENDIF(WIN32)
//...
message(===================)
message(STATUS "THE_MRPT_SOURCE_DIR = ${THE_MRPT_SOURCE_DIR}")
message(STATUS "THE_CMAKE_BINARY_DIR = ${THE_CMAKE_BINARY_DIR}")
message(STATUS "THE_MRPT_CONFIG_FILE_INCLUDE_DIR = ${THE_MRPT_CONFIG_FILE_INCLUDE_DIR}")
message(STATUS "THE_MRPT_LIBS_INCL_DIR = ${THE_MRPT_LIBS_INCL_DIR}")
2.script_create_config_h.cmake
该文件产生/mrpt/config.h文件。
仅去掉了路径最后的"/",尝试不去掉"/",编译仍能通过。原因不明。
IF(UNIX)
# SET(MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/mrpt-config/unix/" )
SET(MRPT_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/mrpt-config/unix" )
ENDIF(UNIX)
3.编译MRPT源码
如上所述,需要在cmake命令后添加自定义安装路径:CMAKE_INSTALL_PREFIX。
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/yu/sources/mrpt/build
make -j8
4.新建测试工程
1.新建目录test
mkdir test
cd test
2.新建测试文件test.cpp
3.新建CMakelists.txt文件
根据cmake编译提示,需要提供包含MRPTConfig.cmake文件的路径作为MRPT_DIR。
从MRPT编译结果来看,MRPTConfig.cmake文件产生在”/home/yu/sources/mrpt/build“路径下。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
add_compile_options(-std=c++11)
project(test)
SET(MRPT_DIR "/home/yu/sources/mrpt/build")
FIND_PACKAGE( MRPT REQUIRED slam gui obs base maps opengl tfest)
if (MRPT_FOUND)
message(STATUS "FOUND MRPT")
message(STATUS "MRPT_VERSION = ${MRPT_VERSION}")
message(STATUS "MRPT_LIBS = ${MRPT_LIBS}")
message(STATUS "MRPT_INCLUDE_DIRS = ${MRPT_INCLUDE_DIRS}")
message(STATUS "MRPT_LINK_DIRECTORIES = ${MRPT_LINK_DIRECTORIES}")
add_executable(${PROJECT_NAME} test.cpp)
target_link_libraries(${PROJECT_NAME} mrpt-slam mrpt-gui mrpt-obs mrpt-base mrpt-maps mrpt-opengl mrpt-tfest)
endif(MRPT_FOUND)
4.新建build目录存放编译结果
mkdir build
5.编译运行测试代码
cmake ..
make -j8
./test