CMake是一个开源的、跨平台的自动化构建工具,通过cmake我们可以轻松地管理我们的项目。注意:·CMake并不是包管理工具!·CMake并不只支持C/C++。掌握CMake是学习C++必经之路!
CMake 和 Makefile 是两个不同的概念,它们之间有一定的关系。
Makefile:
make
命令,Makefile 可以根据规则和依赖关系自动构建项目。CMake:
cmake
命令生成构建文件,然后使用生成的构建文件进行实际的编译和构建。关系:
????????在一个典型的 CMake 项目中,开发者会编写 CMakeLists.txt 文件,描述项目的结构、依赖关系和构建规则。然后,执行 cmake
命令生成适用于目标平台的构建文件(如 Makefile),最后使用 make
命令或其他适当的构建系统来进行实际的编译和构建。这种方式使得项目可以更容易地在不同的平台和编译器上进行构建。
CMakeLists.txt
是一个用于配置和生成项目的 CMake 构建系统的配置文件。CMake 是一个跨平台的构建工具,可以用于管理 C++ 项目的构建过程。CMakeLists.txt
文件通常位于项目的根目录,并包含了一系列指令和配置,用于描述项目的结构和构建过程。
下面是最基本的配置 cmake_minimum_required(VERSION3.20)#最小版本 project(Hello)#项目名。 add_executable(Hello hello.cpp)#抽源文件生成一个可执行的程序
# 设置最低的 CMake 版本要求
cmake_minimum_required(VERSION 3.10)
# 设置项目名称
project(MyProject)
# 添加可执行文件,并指定源文件
add_executable(my_executable main.cpp)
# 添加头文件搜索路径
include_directories(include)
# 添加链接库
target_link_libraries(my_executable my_library)
创建一个build并在此目录下生成makefile或其他文件
大家也可以通过直接下载的方式
# 安装 build-essential 和 wget
sudo apt-get update
sudo apt-get install build-essential wget
# 下载 CMake 源代码
wget https://cmake.org/files/v3.28/cmake-3.28.0.tar.gz
# 解压下载的压缩包
tar -zxvf cmake-3.28.0.tar.gz
# 进入 cmake 目录
cd cmake-3.28.0
# 配置构建
./configure
# 编译 CMake
sudo make
# 安装 CMake
sudo make install
# 检查 CMake 版本
cmake --version
cmake minimum_required(VERSION 3.20)
project(hello)
add executable(hello hello.cpp)
cmake -B build
3. 生成二进制可执行文件
Cmake --Build Build
在CMake中,.cmake
文件通常用于存储CMake脚本片段,它们包含了一些CMake的配置、设置或功能定义。这样的脚本片段可以被其他CMakeLists.txt文件或者CMake脚本引入(include)。
有几种用途和场景,其中之一是模块化地组织CMake配置。这对于将项目配置分割成小块、提高可维护性、重用相似配置或功能块非常有用。在项目中,你可能会看到一些通用的配置放在一个单独的 .cmake
文件中,然后通过 include()
命令在CMakeLists.txt中引入。
示例 .cmake
文件:
# common_config.cmake
# 设置编译器标志
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# 定义一个函数
function(print_hello)
message("Hello from common_config.cmake")
endfunction()
在项目的CMakeLists.txt中引入这个 .cmake
文件:
# CMakeLists.txt
# 引入 common_config.cmake 文件
include(common_config.cmake)
# 添加可执行文件
add_executable(my_executable main.cpp)
# 调用函数
print_hello()
????????这样做有助于保持CMakeLists.txt的整洁,将配置细节分离出去,提高了代码的可读性和可维护性。.cmake
文件可以用于定义变量、函数、宏等,然后在其他CMake脚本中进行引用和使用。
cmake -P *.cmake
?比如有一个first.cmake文件,其中是message("hello") 。?cmake -P first.cmake
?获取Cmake中信息,
${}
在cmkae文件中 ,将cpp文件赋给变量,然后在cmakeLists.txt文件中使用include方法引入cmake文件,然后将变量添加道add_executable中
# 指定 CMake 最低版本要求
cmake_minimum_required(VERSION 3.20.0)
# 定义项目并指定编程语言为 C++
project(Animal CXX)
# 添加子目录,包含 'animal' 库的 CMakeLists.txt
add_subdirectory(animal)
# 添加可执行文件,并链接 'AnimalLib' 库
add_executable(Animal main.cpp)
# 将 'AnimalLib' 库链接到 'Animal' 可执行文件
target_link_libraries(Animal PUBLIC AnimalLib)
# 包含 'animal' 头文件目录
target_include_directories(Animal PUBLIC "${PROJECT_SOURCE_DIR}/animal")
?
1. 静态库
2. 动态库