😏*★,°*:.☆( ̄▽ ̄)/$:*.°★* 😏 这篇文章主要介绍CMake工具的入门使用。
————————————————学其所用,用其所学。——梁启超—————————————————
欢迎来到我的博客,一起学习知识,共同进步。 🥞喜欢的朋友可以关注一下,下次更新不迷路🥞
文章目录
- :smirk:1. CMake工具介绍
- :blush:2. CMake安装与使用
- Windows安装CMake:
- Linux安装CMake:
- :satisfied:3. CMake语法说明
- 1. 构建类型
- 2. 注释、输出、大小写等
- 3. 布尔值
- 4. 常用命令
- 5. CMakeLists.txt示例
😏1. CMake工具介绍
CMake是一个跨平台的自动化构建(编译)工具,用于管理、生成和测试软件项目。它使用类似Make
的语法来描述构建过程,并提供了一种简单的方式来跨多个操作系统(Win、Linux)和编译器(MinGW、gcc)生成可执行文件、库和安装包。CMake支持各种编程语言,包括C、C++、Java等,可以在Linux、Windows、Mac OS X等多种平台上使用。
CMake通过CMakeLists.txt
文件来描述项目的构建过程,其中包含项目名称、源文件列表、目标类型、依赖项等信息。CMake可以生成Makefile
或Visual Studio
项目文件等,使开发人员可以在不同的平台和编译器上使用相同的配置文件进行构建。
除了构建之外,CMake还提供了测试框架(搭配gtest)、打包功能(搭配nsis)、安装规则等功能,帮助开发人员更方便地管理和部署他们的软件项目。
😊2. CMake安装与使用
官网:https://cmake.org/
Windows安装CMake:
下载链接:https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-windows-x86_64.msi
Linux安装CMake:
# 更新软件列表
sudo apt-get update
# 安装
sudo apt-get install cmake
# 验证版本
cmake --version
对于一个配置好的CMake项目来说,从命令行生成工程文件是很简单的,一般步骤如下:
# 创建build目录
mkdir build && cd build
# 生成Makefile
cmake .. # (Windows-MinGW)cmake -G "MinGW Makefiles" ..
# 编译
make
# 生成可执行文件
😆3. CMake语法说明
1. 构建类型
可以指定的构建类型有:Debug、Release、MinSizeRel、RelWithDebInfo
。使用示例:
cmake -DCMAKE_BUILD_TYPE=Debug
2. 注释、输出、大小写等
注释用#
,大小写不分,用message
来输出信息,用set()
来定义变量,用math()
来进行数学计算。
3. 布尔值
表示False的有:OFF、FALSE、N、NO、0、”“(空字串)、没被指派值的变量、NOTFOUND、任何结尾是 -NOTFOUND 的字串
。
表示TRUE的有:ON、TRUE、Y、YE、YES、1、其他不归类为 FALSE 的字串
。
4. 常用命令
指定项目名称:project(Main)
指定需要的CMake的最低版本:cmake_minimum_required(VERSION 2.8)
用于将 dir 目录下的所有源文件的名字保存在变量 variable 中:aux_source_directory(. DIR_SRCS)
用于指定从一组源文件 source1 source2 … sourceN 编译出一个可执行文件且命名为 name:add_executable(Main ${DIR_SRCS})
用于指定从一组源文件 source1 source2 … sourceN 编译出一个库文件且命名为name:add_library(Lib ${DIR_SRCS})
用于指定某个目标(可执行文件或者库文件)依赖于其他的目标。这里的目标必须add_executable、 add_library、 add_custom_target 命令创建的目标:add_dependencies(target-name depend-target1 depend-target2 …)
用于添加一个需要进行构建的子目录:add_subdirectory(Lib)
用于指定 target 需要链接 item1 item2 …。这里 target 必须已经被创建, 链接的item 可以是已经存在的 target(依赖关系会自动添加):target_link_libraries(Main Lib)
用于设定变量 variable 的值为 value。如果指定了 CACHE 变量将被放入 Cache(缓存)中:set(ProjectName Main)
用于移除变量 variable。如果指定了 CACHE 变量将被从 Cache 中移除:unset(VAR CACHE)
载入预定义的 cmake 模块:INCLUDE(module [OPTIONAL])
用于设定目录, 这些设定的目录将被编译器用来查找 include 文件:include_directories(${PROJECT_SOURCE_DIR}/lib)
5. CMakeLists.txt示例
示例一:
project(HELLO)
set(SRC_LIST main.c hello.c)
add_executable(hello ${SRC_LIST})
示例二:
project(HELLO)
set(LIB_SRC hello.c)
set(APP_SRC main.c)
add_library(libhello ${LIB_SRC})
add_executable(hello ${APP_SRC})
target_link_libraries(hello libhello)
以上。