查看cmake的版本
cmake --version
一. cmakelists文件编写
以下为cmakelists中文件内容
1.1 一级cmakelist文件
cmake_minimum_required(VERSION 3.5)
project( apa )
# cmakelists中更改
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++14") # g++编译选项
# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
# 指定头文件搜索路径, 子模块也会共享此查询目录,无需重复设置
include_directories(
${PROJECT_SOURCE_DIR}/src/inc
/opt/ros/noetic/include/
)
# 第三方库缩写
# 设置编译文件路径
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build)
# 指定编译子目录
add_subdirectory(useEigen)
add_subdirectory(useGeometry)
add_subdirectory(visualizeGeometry)
add_subdirectory(examples)
1.2 二级cmakelist文件
cmake_minimum_required( VERSION 3.5 )
# project( ipm )
set(CMAKE_CXX_FLAGS "-std=c++14")
# 添加Eigen头文件
include_directories( "/usr/include/eigen3")
# 添加Pangolin依赖
find_package( Pangolin )
include_directories( ${Pangolin_INCLUDE_DIRS} )
# 指定源码目录
AUX_SOURCE_DIRECTORY(./src DIR_SRCS)
add_executable( ipm ${DIR_SRCS} )
target_link_libraries( ipm ${Pangolin_LIBRARIES} )
1.3 链接的库文件
# Eigen
include_directories("/usr/include/eigen3")
# Ceres
find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
# g2o
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIRS})
# Pangolin
find_package( Pangolin )
include_directories( ${Pangolin_INCLUDE_DIRS} )
message("OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
1.4 debug模式更改
# 1. cmakelists中更改
set(CMAKE_BUILD_TYPE Debug)
# 2. launch.json中更改
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/lsw/catkin_ws/devel/lib/apa_location/apa_location_ros", # 这边写上要debug的程序名称
二. 路径的变量
${CMAKE_CURRENT_SOURCE_DIR} # 当前处理的CMakeLists.txt所在的目录
${CMAKE_SOURCE_DIR} # 项目所在路径
${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR} # 指定工程路径
# 这些路径可以 message("CMAKE_SOURCE_DIR------${CMAKE_SOURCE_DIR}") 编译查看具体路径
三.其他
catkin_make
cmakelists中的project中的名字要与文件夹的名字相同,否则不会进行编译