CMakefile简要教程.md

1. 一个实例


 # 定义cmake版本

cmake_minimum_required( VERSION 2.8 )

# 工程名称

project ( myslam ) 



# 定义变量 下面的是编译器设置的变量,就是定义编译器条件

set( CMAKE_CXX_COMPILER "g++" )

set( CMAKE_BUILD_TYPE "Release" )

set( CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3" )



# cmake_modules 给find_package提供 寻找路径

list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )



# 设置编译后的执行文件输出路径

set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin )



# 设置编译后的依赖库文件输出路径

set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib )



############### dependencies ######################

# Eigen

include_directories( "/usr/include/eigen3" )

# OpenCV

find_package( OpenCV 3.1 REQUIRED )

include_directories( ${OpenCV_INCLUDE_DIRS} )

# Sophus 

find_package( Sophus REQUIRED )

include_directories( ${Sophus_INCLUDE_DIRS} )

# G2O

find_package( G2O REQUIRED )

include_directories( ${G2O_INCLUDE_DIRS} )



set( THIRD_PARTY_LIBS 

    ${OpenCV_LIBS}

    ${Sophus_LIBRARIES}

    g2o_core g2o_stuff g2o_types_sba

)

############### source and test ######################

# 顶层的 CMakeList.txt 文件中使用 add_subdirectory 告诉cmake去子目录寻找新的CMakeList.txt 子文件

include_directories( ${PROJECT_SOURCE_DIR}/include )



# 添加子文件夹

add_subdirectory( src )

add_subdirectory( test )

最终效果如下:

在这里插入图片描述

  • 上面说到去子目录找CMakeList.txt 子文件 (src),子文件的内容是:下面只是一个例子而已。

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. CMake 变量

  • 隐式变量 —— Cmake自带的一些系统变量,列如:PROJECT_BINARY_DIR,` _BINARY_DIR

`等等。

  • 显式变量 —— 自定义变量 用set来定义。

3. export 命令

  • 可以将构建目录导入cmake库(类似吧),方便外部项目搜索。

  • 用法:export(PACKAGE <name>),注意此命令需要有<name>Config.cmake文件在你的build文件里面。

4. CONFIGURE_FILE 命令

  • 将一份文件拷贝到另一个位置并修改它的内容。可以用来生成上面的<name>Config.cmake文件。

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值