Cmake
一、CMake 和 Makefile、Make关系
CMake是一个开源的、跨平台的自动化构建工具,通过cmake我们可以轻松地管理我们的项目。注意:·CMake并不是包管理工具!·CMake并不只支持C/C++。掌握CMake是学习C++必经之路!
CMake 和 Makefile 是两个不同的概念,它们之间有一定的关系。
-
Makefile:
- Makefile 是一种用于构建和编译项目的脚本文件。它定义了项目中的源文件、依赖关系以及构建规则。通过执行
make
命令,Makefile 可以根据规则和依赖关系自动构建项目。 - Makefile 主要用于管理项目的构建流程,包括编译、链接等过程。Makefile 是一种特定于 Unix/Linux 系统的构建工具,通常使用 GNU Make 来执行。
- Makefile 是一种用于构建和编译项目的脚本文件。它定义了项目中的源文件、依赖关系以及构建规则。通过执行
-
CMake:
- CMake 是一个跨平台的构建系统生成工具。它不直接执行构建操作,而是生成适用于各种构建系统的配置文件,比如 Makefile、Visual Studio 的项目文件等。
- CMake 的主要优势在于提供了一个统一的、与编译器无关的配置文件,使得项目能够在不同的操作系统和编译器中进行构建。通过执行
cmake
命令生成构建文件,然后使用生成的构建文件进行实际的编译和构建。
-
关系:
- CMake 可以生成 Makefile,这样就能够利用 Make 来执行项目的构建。但 CMake 并不仅限于生成 Makefile,它还可以生成其他构建系统的配置文件,如 Visual Studio 的项目文件、Ninja 等。
- CMake 的目标是提供一种跨平台、与编译器无关的构建解决方案,使得开发者能够更轻松地在不同平台上构建和管理项目。
????????在一个典型的 CMake 项目中,开发者会编写 CMakeLists.txt 文件,描述项目的结构、依赖关系和构建规则。然后,执行 cmake
命令生成适用于目标平台的构建文件(如 Makefile),最后使用 make
命令或其他适当的构建系统来进行实际的编译和构建。这种方式使得项目可以更容易地在不同的平台和编译器上进行构建。
1.编写CMakeLists.txt文件
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)
2.cmake -B build
创建一个build并在此目录下生成makefile或其他文件
3.cmake --build build生成项目
二、通过源码安装Cmake
大家也可以通过直接下载的方式
# 安装 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用法
1. 首先创建CMakeLists.txt文件“
cmake minimum_required(VERSION 3.20)
project(hello)
add executable(hello hello.cpp)
2.? 生成构建系统文件Makefile
cmake -B build
3. 生成二进制可执行文件
Cmake --Build Build
?四、Cmake语法
1. 运行.cmake文件
在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中信息,
${}
2. Set语法
3. List语法
?4. 流程控制
5.? 函数
6. 作用域和宏
五、Cmake构建项目方式
1.?直接写入源码路径的方式
2.?调用子目录cmake脚本的方法
在cmkae文件中 ,将cpp文件赋给变量,然后在cmakeLists.txt文件中使用include方法引入cmake文件,然后将变量添加道add_executable中
3. CmakeList嵌套
# 指定 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")
?
4.Object Libraries
?六、Cmake如何生成静态库和动态库
七、Cmake如何使用动态库和静态库
1. 静态库
2. 动态库
八、 Cmake与源文件交互
九、条件编译
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!