CMake 教程

15 篇文章 0 订阅

CMake 教程


CMake 是一个跨平台的、开源的构建工具。 cmakemakefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.

1. Linux下使用cmake的流程
  • 编写配置文件 CMakeLists.txt
  • 执行cmake PATHccmake PATH生成Makefile
  • make 编译
2. CMake 项目文件目录
├── CMakeLists.txt
├── include
│        └── Hello.h
├── src
│        ├── Hello.cpp
│        └── main.cpp
└── build
3. CMake Sample
# 指明对cmake的最低(高)版本的要求
cmake_minimum_required(VERSION 2.6) 

# 创建项目
project (ProjectName)

# 查找依赖包,如果找到PACK库就把头文件路径和库文件路径赋值给下面
# 两个语句中的 ${PACK_INCLUDE_DIRS}、${PACK_LIBRARIES}。
find_package(PACK REQUIRED)
include_directorise(${PACK_INCLUDE_DIRS})
link_directorise(${PACK_LIBARAY_DIRS})
add_definition(${PACK_definition})

# 创建源文件变量SOURCES,并在可执行程序中添加源文件
set(SOURCES src/Hello.cpp src/main.cpp) 
add_executable(ProjectName ${SOURCES})

# 设置要包含的头文件的目录、设置要链接的库
target_include_directories(ProjectName PRIVATE ${PROJECT_SOURCE_DIR}/include)
target_link_libaries(ProjectName ${PACK_LIBARIES})

# 指定在安装时运行的规则
install(TARGET ProjectName RUNTIME DESTINATION bin)
4. 生成可执行文件
cd build         #外部编译
cmake ..         #生成Makefile文件
make             #生成可执行文件
./ProjectName    #执行可执行文件
5. CMake模板 - PCL
# 指定cmake最低版本
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
# 指定项目名称
project(lidar_obstacle_detection)

# 给CXXFLAGS、CMAKE_CXX__FLAGS、CMAKE_CXX_STANDARD 赋值
set(CXX_FLAGS "-Wall")
set(CMAKE_CXX_FLAGS, "${CXX_FLAGS}")
set(CMAKE_CXX_STANDARD 14)

# 设定源码列表.cpp
set(SOURCE_FILES src/environment.cpp src/render/render.cpp src/processPointClouds.cpp)
# # 将${CMAKE_SOURCE_DIR}目录下所有的.cpp文件放入DIR变量中
# aux_source_directory(${CMAKE_SOURCE_DIR} SOURCE_FILES)

# 查找PCL库, 找到之后将其头文件、库文件路径赋值到 PCL_INCLUDE_DIRS、PCL_LIBRARY_DIRS
find_package(PCL REQUIRED)

# 加入头文件路径, include_directories(dir1 dir2 ...)
include_directories(${PCL_INCLUDE_DIRS})
# 链接静态库文件路径, link_directories(lib_1 lib_2 ...)
link_directories(${PCL_LIBRARY_DIRS})
message("link directories: ${PCL_LIBRARY_DIRS}")

# 增加宏定义
add_definitions(${PCL_DEFINITIONS})
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")

# IF(GPU)
# #在命令行中使用cmake -DGPU,会进入这一行,C++代码中自动会有#define GPU
#   ADD_DEFINITIONS(-DGPU) #注意一定要有-D
# ENDIF(GPU)

#添加子目录,作用相当于进入子目录里面,展开子目录的CMakeLists.txt
#同时执行,子目录中的CMakeLists.txt一般是编译成一个库,作为一个模块
#在父目录中可以直接引用子目录生成的库
#add_subdirectory(math)
 
#生成动/静态库
#add_library(动/静态链接库名称  SHARED/STATIC(可选,默认STATIC)  源码列表)
#可以单独生成多个模块


# 根据源文件生成可执行程序environment
add_executable (environment ${SOURCE_FILES})

# 设置要链接的导入(动态)库, 编译选项中-l后的内容
target_link_libraries (environment ${PCL_LIBRARIES})
message("target link directories: ${PCL_LIBRARY}")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值