CMake简介、语法、常用命令与编译流程

CMake简介

cmake是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它通过简化构建配置和生成构建文件(如Makefiles、Visual Studio项目或Xcode项目)的过程,使跨平台开发更加容易。CMake提供了广泛的文档和社区支持,使得学习和使用它更加容易。可以通过CMake官方网站获取更多信息和资源。CMake具有以下关键特点:

  • 跨平台性:CMake可在多个操作系统上运行,包括Linux、Windows、macOS等,它使用与平台和编译器独立的配置文件来对软件编译过程进行控制,因此可以用于构建跨平台应用程序。
  • 生成器:CMake 并不直接构建出最终的软件,而是生成标准的Makefile文件或者VisualStudio项目文件,然后再使用Make或者VisualStudio进行编译。CMake支持生成多种构建工具和集成开发环境(IDE),包括Make、Ninja、Visual Studio、Xcode等,允许开发者选择适合其项目的构建工具。
  • 自动检测和配置:CMake能够自动检测系统和库的可用性,从而简化了项目的配置过程。它可以帮助开发者找到所需的依赖项,以便构建项目。
  • 模块化和可扩展:CMake的配置是基于模块的,开发者可以编写自定义的CMake模块,以满足其特定需求。这使得CMake非常灵活和可扩展。
  • 简洁的CMakeLists.txt文件:项目的配置信息通常存储在CMakeLists.txt文件中,这是一种清晰、易于维护的方式来描述项目的结构和构建规则。

下面是一个简单的CMakeLists.txt文件示例:

cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 添加可执行文件
add_executable(MyApp main.cpp)

# 指定编译器标志
target_compile_options(MyApp PRIVATE -Wall)

# 指定链接的库
target_link_libraries(MyApp mylib)

基本语法规则

  • cmake变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
  • 环境变量使用$ENV{}方式取值,使用SET(ENV{VAR} VALUE)赋值
  • 指令(参数1 参数2…)
    参数使用括弧括起,参数之间使用空格或分号分开。

CMake 常用命令

指定cmake的最小版本:

cmake_minimum_required (VERSION 3.0)

设置项目名字:

project(demo)

生成可执行文件:

add_executable(demo demo.cpp)

生成库文件(add_library默认生成静态库,可以显式的控制生成的库的类型):

add_library(common util.cpp)
add_library(common STATIC util.cpp) #生成静态库
add_library(common SHARED util.cpp) #生成动态库或共享库

设置包含目录:

include_directories()

设置链接库搜索目录:

link_directories()

设置需要链接的库:

target_link_libraries()

设置变量:

set(SRC_LIST main.cpp test.cpp)
add_executable(demo ${SRC_LIST})

条件控制:

if(MSVC)
	set(LINK_LIBS common)
else()
	set(boost_thread boost_log.a boost_system.a)
endif()
target_link_libraries(demo ${LINK_LIBS})

编译流程

  1. 编写CmakeLists.txt。
  2. 创建build目录。
  3. 在build目录中执行命令“cmake PATH”或者“ccmake PATH”生成 Makefile( PATH是CMakeLists.txt所在的目录 )。
  4. 使用make命令进行编译。(Windows平台的话用Visual Studio打开生成的demo.sln,然后编
    译)

以下是一个示例的命令行工作流程:

mkdir build
cd build
cmake ..
make  # 或者使用其他构建工具

报错解决

报错一

某些软件包编译时需要高版本的Cmake,因此需要升级Cmake。

CMake卸载

CMake卸载方法有两种:

  • 如果CMake是通过sudo apt-get install cmake 安装的,可以使用以下命令,但是此方法可能会导致之前关联安装的很多库一起被卸载,一定注意查看这些库是否重要
sudo apt-get remove cmake
  • 如果CMake是通过源码安装,以上删除方式则不能成功删除,因此对于源码安装的cmake,经实践,首先到cmake的安装目录下找到install_manifest.txt,txt中保存了所有cmake的附属文件的安装目录,将txt中显示的文件全部删除,即可完成对于cmake的卸载。
# 例如,文件安装路径为/usr/local/share/cmake* 、/usr/local/bin/cmake*等,执行以下命令:
sudo rm -rf /usr/local/share/cmake*

通过cmake --version查看CMake版本信息,即可发现原来的CMake不见了。然后就可以安装所需要版本的CMake。

CMake安装

CMake安装方法有两种:

报错二

catkin_make报错:

Could NOT find jsk_recognition_msgs

jsk_recognition是用于JSK实验室的感知包的堆栈,此报错出现的原因是jsk_recognition软件包没有安装,解决方法如下:

# ros版本为melodic,若为其他版本,需要相应修改
sudo apt-get install ros-melodic-jsk-recognition-msgs 
sudo apt-get install ros-melodic-jsk-rviz-plugins

报错三

catkin_make报错:

Could not find a package configuration file provided by "uuid_msgs" with

此报错出现的原因是未找到unique_identifier软件包,解决方法如下:

cd src
git clone https://github.com/ros-geographic-info/unique_identifier.git

报错四

catkin_make报错:

glog/logging.h: No such file or directory

此报错出现的原因是libgoogle-glog-dev未安装,解决方法如下:

sudo apt-get install libgoogle-glog-dev

报错五

Cmake报错:

CMake Error: Could not find CMAKE_ROOT !!!

解决方法是清除缓存:

hash -r
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI Player

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

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

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

打赏作者

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

抵扣说明:

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

余额充值