CMake 写法

原理:

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:

               1. cmake

               2. make


cmake  指向CMakeLists.txt所在的目录,例如cmake .. 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中间文件以及makefile文件,所以一般建议新建一个新的目录,专门用来编译,例如:

                mkdir build

                 cd build

                  cmake ..

                   make


#1. cmake verson,指定cmake版本

      cmake_minimum_required(VERSION3.2)  

#2. project name,指定项目的名称,一般和项目的文件夹名称对应 

       PROJECT(XXX) #自己个自己的项目取个名字

#3  find_package:找到所需外部库的路径

       find_package()

     如果这样找不到的话,那就需要自己添加绝对路径,但是一般都可以找到,如果找不到就用         target_link_libraries 直接去链接 .so 文件。 后面会讲

#3.  include_directories 添加头文件目录

    include_directories(

                            ${PROJECT_SOURCE_DIR}

                           ${PROJECT_SOURCE_DIR}/include

                           ${EIGEN3_INCLUDE_DIR}

                          ${Pangolin_INCLUDE_DIRS}

                                )



#4 设置 ,是放置代码编译的  .so文件

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)

#5 add_library 该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。该指令常用的语法如下

add_library(${PROJECT_NAME} SHARED

                          src/map.cpp

                            src/tool.cpp

)

#6 link_directories :该指令的作用主要是指定要链接的库文件的路径,该指令有时候不一定需要。因为find_package和find_library指令可以得到库文件的绝对路径。不过你自己写的动态库文件放在自己新建的目录下时,可以用该指令指定该目录的路径以便工程能够找到。

link_directories(

                   lib

                 ) 

# add executablefile,添加要编译的可执行文件

add_executable($PROJECT_NAME$_main ./autonet.cpp)

#7 target_link_libraries:该指令的作用为将目标文件与库文件进行链接

target_link_libraries($PROJECT_NAME$_main

                                ${OpenCV_LIBS}  #因为前面find_package 已经找到了路径

                                 ${EIGEN3_LIBS}

                                 ${Pangolin_LIBRARIES}

                                  ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so

                                 ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so

                                  )

你可能感兴趣的:(CMake 写法)