ch2

g++编译

g++ helloSLAM.cpp
在当前目录生成a.out可执行文件

a.out在终端中./a.out运行,直接右键无法执行控制台程序

g++ helloSLAM.cpp -o helloSLAM
指定输出可执行文件的名称为helloSLAM

cmake

通常一个项目包含多个类,要满足各个类之间的依赖关系,还要区分可执行文件库文件,g++的命令将变得很长且容易出错。CSAPP中有详细讲解。
于是makefile自动编译,当项目更大更复杂时,用cmake工具生成makefile。
标准步骤:

mkdir build #编译输出文件夹
cd build
cmake .. #生成makefile
make     #编译
sudo make install  #安装(默认/usr/local)

编写CMakeLists.txt

#声明cmake工具最低版本
cmake_minimum_required(VERSION 3.14)

#声明cmake工程,与源程序名称无关
project(ch2)

#定义变量 C++标准版本
set(CMAKE_CXX_STANDARD 14)

#添加可执行程序 指定名称
add_executable(helloSLAM helloSLAM.cpp)

#将cpp源程序编译成名为hello的库,输出`libhello.a`静态库文件
add_library(hello libHelloSLAM.cpp)

#共享库,得到libhello_shared.so
add_library(hello_shared SHARED libHelloSLAM.cpp)

#静态库每次使用都会生成一个副本,共享库只有一个

#编写头文件,引用头文件就可以使用库里的函数,如果不在同一目录需要指定库文件目录include_directories()
add_executable(useLibHello useLibHello.cpp)
target_link_libraries(useLibHello hello_shared)#文件名为libhello_shared.so

将工程文件夹规范化,创建四个子文件夹:src,bin,include,lib。修改CMakeLists.txt

#声明cmake工具最低版本
cmake_minimum_required(VERSION 3.5.1)

#声明cmake工程,与源程序名称无关 隐式定义<project>_BINARY_DIR 和<project>_SOURCE_DIR 两个变量 ${变量名}使用变量
project(ch2)

#定义变量 C++标准版本
set(CMAKE_CXX_STANDARD 14)

#可执行文件生成目录
set( EXECUTABLE_OUTPUT_PATH ${ch2_SOURCE_DIR}/bin )
#库文件生成目录
set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib )

#添加可执行程序 指定名称
add_executable(helloSLAM ${PROJECT_SOURCE_DIR}/src/helloSLAM.cpp)

#将cpp源程序编译成名为hello的库,生成libhello.a静态库
add_library(hello ${PROJECT_SOURCE_DIR}/src/libHelloSLAM.cpp)

#共享库,得到libhello_shared.so
add_library(hello_shared SHARED ${PROJECT_SOURCE_DIR}/src/libHelloSLAM.cpp)

#静态库每次使用都会生成一个副本,共享库只有一个

#编写头文件,引用头文件就可以使用库里的函数,如果不在同一目录需要指定库文件目录include_directories()
add_executable(useLibHello ${PROJECT_SOURCE_DIR}/src/useLibHello.cpp)
target_link_libraries(useLibHello hello_shared)#文件名为libhello_shared.so
include_directories(${ch2_SOURCE_DIR}/include)#添加头文件目录

你可能感兴趣的:(SLAM)