cmake的使用以及相关配置(opencv、Eigen等)

1. 安装

在ubuntu系统下的安装命令如下:

sudo apt install cmake

查看cmake版本:

cmake -version

2. cmake的使用

  • 为什么用cmake

理论上说,任意一个 C++ 程序都可以用 g++ 来编译。但当程序规模越来越大时,一个工程可能有许多个文件夹和里边的源文件,这时输入的编译命令将越来越长。如果仅靠 g++ 命令,我们需要输入大量的编译指令,整个编译过程会变得异常繁琐。在历史上工程师们曾使用 makefile 进行自动编译,但下面要谈的 cmake 比它更加方便。在一个 cmake 工程中,我们会用 cmake 命令生成一个 makefile 文件,然后,用 make命令,根据这个 makefile 文件的内容,编译整个工程

  • 使用步骤

在CMakeLists.txt同一目录下新建build目录,使用步骤类似于下列命令。

mkdir build
cd build
cmake .. # 在该目录下生成makefile文件
make -j4 # 编译
./YourExecutable #运行

上面的cmake后面接了两个点,表示CMakeLists.txt在上一个目录。也可以不添加build目录,CMakeLists.txt同一目录使用cmake .进行编译,只不过生成的内容太多,影响美观。

这一步骤类似于使用源码安装软件,运行命令改为下列命令:

sudo make install

3. CMakeLists.txt的配置

每个 CMakeLists.txt 文件,告诉 cmake 我们要对这个目录下的文件做什么事情。CMakeLists.txt 文件内容需要遵守 cmake 的语法。主要包括基础配置、软件配置以及可执行文件配置

  • 基础配置
cmake_minimum_required(VERSION 2.8)# # 声明要求的 cmake 最低版本
project(YourProjectName) # # 声明一个 cmake 工程
set(CMAKE_BUILD_TYPE Release) # 设置编译模式
set(CMAKE_CXX_FLAGS "-std=c++14 -O3") # C++支持的版本
set(OpenCV_DIR /opt/ros/kinetic/share/OpenCV-3.3.1-dev)#手动定义变量,find_package没找到的情况下可以使用
  • 软件配置
#典型一般配置
include_directories(/usr/local/include)#找根目录


# OpenCV
find_package(OpenCV REQUIRED)#寻找OpenCV.CMakeLists,以此找到包,并赋值各库相关变量
include_directories(${OpenCV_INCLUDE_DIRS})#添加头文件搜索路径,这样可以在代码中的#include做根目录
target_link_libraries(${OpenCV_LIBS})
#OpenCV_INCLUDE_DIRS是关于find_package的变量
#如果要生成.so文件
find_package(OpenCV REQUIRED)
target_include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${OpenCV_LIBS})

# Ceres
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})

# g2o
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIRS})

# Eigen
include_directories("/usr/include/eigen3")

# pcl
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS}) #库地址
add_definitions(${PCL_DEFINITIONS})
  • 添加可执行文件方式:
add_executable(gaussNewton gaussNewton.cpp)#添加对主函数的可执行文件
target_link_libraries(gaussNewton ${OpenCV_LIBS})  # 添加OpenCV的库,目标链接库

add_executable(ceresCurveFitting ceresCurveFitting.cpp)
target_link_libraries(ceresCurveFitting ${OpenCV_LIBS} ${CERES_LIBRARIES})

add_executable(g2oCurveFitting g2oCurveFitting.cpp)
target_link_libraries(g2oCurveFitting ${OpenCV_LIBS} ${G2O_CORE_LIBRARY} ${G2O_STUFF_LIBRARY})

add_library(${PROJECT_NAME} SHARED
src/System.cc
src/Tracking.cc
) #非main.cc,${PROJECT_NAME}表示该工程共享,非单独可执行文件独有。

参考文章:https://blog.youkuaiyun.com/whahu1989/article/details/82078563

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值