CmakeList中常用语法学习

一:add_library

该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。SHARED:库会被动态链接(动态链接库),在运行时会被加载。

《视觉slam十四讲》中的例子:

add_library( myslam SHARED
        frame.cpp
        mappoint.cpp
        map.cpp
        camera.cpp
        config.cpp
        visual_odometry.cpp
        )

生成的链接文件:

CmakeList中常用语法学习_第1张图片

二:target_link_libraries

该指令的作用为将目标文件与库文件进行链接,一般和add_***连用,上一步add的就是target_link_libraries的目标文件

 例子1:

#目标文件是要生成的动态库文件myslam,库文件就是第三方库文件
add_library( myslam SHARED
        frame.cpp
        mappoint.cpp
        map.cpp
        camera.cpp
        config.cpp
        visual_odometry.cpp
        )
target_link_libraries( myslam
        ${THIRD_PARTY_LIBS}
        )

 例子2:

#目标文件是要生成的run_vo可执行文件,库文件是上面生成的动态库文件myslam
add_executable( run_vo run_vo.cpp )
target_link_libraries( run_vo myslam)

三:其他的简单常用语法

cmake_minimum_required(VERSION 2.8)//需要的cmake最低版本
project(voproject)//工程名字
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")//添加对c++11的支持

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)//设置可执行文件的输出路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)//设置库文件的输出路径
include_directories( ${PROJECT_SOURCE_DIR}/include)//包含头文件的路径
add_subdirectory( src)//当前目录下的子目录src文件夹
add_subdirectory( test)//当前目录下的子目录test文件夹

CmakeList中常用语法学习_第2张图片

另外,slam中还需要一些依赖库eigen,opencv,sophus等,基本的语法都是一样的。首先因为eigen库比较特殊,是一个用纯头文件搭建的库,所以只需要包含头文件所在目录"/usr/include/eigen3"即可。

其他的库操作——第一步:找到你电脑里库的位置;第二步:find_package;第三步:include_directories

#Eigen
include_directories( "/usr/include/eigen3" )
#opencv
set(OpenCV_DIR "/home/zss/opencv-3.2.0/build")
find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
#sophus
set(Sophus_DIR "/home/zss/Sophus/build")
find_package(Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )

你可能感兴趣的:(slam,c++)