CMakefile简要教程.md

文章目录

    • 1. 一个实例
    • 2. CMake 变量
    • 3. export 命令
    • 4. CONFIGURE_FILE 命令
    • 参考

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 )

最终效果如下:

CMakefile简要教程.md_第1张图片

  • 上面说到去子目录找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 ),注意此命令需要有Config.cmake文件在你的build文件里面。

4. CONFIGURE_FILE 命令

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

参考

  • 官网步骤

  • cmake使用示例与整理总结

  • CMake 入门

  • cmake 常用变量和常用环境变量查表手册—整理

你可能感兴趣的:(C++/C)