视觉slam14讲ch1-cmake练习

记录学习《视觉slam十四讲》的过程,并在过程中重点动手进行实践,其中的小练习也都比较简单,应尽量理解每一步骤背后的深层含义,但也切忌眼高手低。

  • 工程化的"Hello World"

    由于本练习旨在cmake练习,就不放工程代码了,就是一个调用了库函数的hello

    • 生成静态库与动态库,并安装在系统中(以使得本机的所有开发者都可以调用)

      下面的cmakelists放在lib文件夹中,与库的头文件和源文件同级

      cmake_minimum_required(VERSION 3.10)
      SET(LIBHELLO_SRC hello.cpp)
      ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
      //建立动态库
      ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
      //建立静态库
      GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME)
      //希望动态库与静态库重名,本行代码与下一行同时作用从而输出hello的静态库
      SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
      //设置静态库的名字为hello
      SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
      SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
      //避免在建立库的时候自动删除同名库
      INSTALL(TARGETS hello hello_static
      LIBRARY DESTINATION lib
      ARCHIVE DESTINATION lib)
      INSTALL(FILES hello.h DESTINATION include/hello)
      //将hello的静态动态库以及头文件安装在系统中

      命令

      cmake -DCMAKE_INSTALL_PREFIX=/usr ..//给定安装路径 
      make 
      sudo make install//注意!这个地方我多次安装没找到对应文件,在命令前加上sudo!
      

      至此就可以在/usr/lib和/usr/include/hello中找到库和头文件了

    • 将主代码与库进行连接并运行

      下面的cmakelists与工程代码同级

      INCLUDE_DIRECTORIES(/usr/include/hello)
      //可以看到这个路径就是上面弄好了库的头文件所在路径
      ADD_EXECUTABLE(useHello useHello.cpp)
      //最基本的建立可执行程序
      TARGET_LINK_LIBRARIES(useHello libhello.so)
      //动态库链接

      下面的cmakelist放在整个工程根目录下,为整个工程的最上层

      cmake_minimum_required(VERSION 3.10)
      PROJECT(USEHELLO)
      //建立工程
      ADD_SUBDIRECTORY(src)
      //添加源代码文件夹
  • 用orb-slam2跑自己的数据集

    • 在orb-slam2的根目录cmake中添加代码

      add_executable(myvideo
      Examples/myvideo.cpp)
      //注意路径
      target_link_libraries(myvideo ${PROJECT_NAME})
      //将cpp与orb-slam2链接
    • 注意的是myvedio.cpp中路径问题

      string parameterFile = "./myvideo.yaml";
      string vocFile = "./ORBvoc.txt";
      // 视频文件
      string videoFile = "./myvideo.mp4";

      其中的yaml配置文件与数据集都是相对于可执行文件的路径而不是cpp的

你可能感兴趣的:(视觉slam十四讲,c++,开发语言)