自学内容网 自学内容网

【配置后的基本使用】CMake基础知识

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀各种软件安装与配置_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. CMake 基础

2.1 CMakeLists.txt 文件

文件结构和基本语法

实例

2.2 变量和缓存

变量定义与使用

缓存变量

2.3 查找库和包

find_package() 指令

使用第三方库

3. 总结


1. 前言

通过上一篇文章:【一篇搞定配置】Window上的CMake的安装配置-CSDN博客

我们已经完成了在Window、Linux、maxos操作系统上的CMake环境配置。

但是很多小伙伴还是不会使用CMake,同时考虑到像linux虚拟机、linux指令等很多友友虽然跟着猫猫完成了配置,但是还是不会使用。

于是,猫猫决定在专栏:各种软件安装与配置_十二月的猫的博客-CSDN博客中开设一个新的部分【配置后的基本使用】用来帮助友友进一步的学习。

2. CMake 基础

2.1 CMakeLists.txt 文件

CMakeLists.txt 是 CMake 的配置文件,用于定义项目的构建规则、依赖关系、编译选项等。

这也是CMake最核心的部分

每个 CMake 项目通常都有一个或多个 CMakeLists.txt 文件。

文件结构和基本语法

CMakeLists.txt 文件使用一系列的 CMake 指令来确定项目构建过程(构建规则、依赖关系、编译选项等)。常见的指令包括:

1、指定 CMake 的最低版本要求:

cmake_minimum_required(VERSION <version>)

例如:

cmake_minimum_required(VERSION 3.10)

2、定义项目的名称和使用的编程语言:

project(<project_name> [<language>...])

例如:

project(MyProject CXX)

3、指定要生成的可执行文件和其源文件(头文件和cpp文件):

add_executable(<target> <source_files>...)

例如:

add_executable(MyExecutable main.cpp other_file.cpp)

4、创建一个库(静态库或动态库)及其源文件:

add_library(<target> <source_files>...)

例如:

add_library(MyLibrary STATIC library.cpp)

 知识补充:

        1、静态库:静态库链接的时候把库直接加载到程序中,运行效率高但耦合度也高

        2、动态库:只是保留接口,将动态库与程序代码独立,运行效率低但耦合度也低

        3、库:各种代码的整合。代码文件链接库后可以直接使用库中的函数

5、链接目标文件与其他库:

target_link_libraries(<target> <libraries>...)

例如:

target_link_libraries(MyExecutable MyLibrary)

将目标文件和库整合在一起,从而让目标文件可以使用库中的代码

 6、添加头文件搜索路径:

include_directories(<dirs>...)

例如:

include_directories(${PROJECT_SOURCE_DIR}/include)

7、设置变量的值:

set(<variable> <value>...)

例如:

set(CMAKE_CXX_STANDARD 11)

8、设置目标属性:

target_include_directories(TARGET target_name
                          [BEFORE | AFTER]
                          [SYSTEM] [PUBLIC | PRIVATE | INTERFACE]
                          [items1...])

例如:

target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)

9、安装规则:

install(TARGETS target1 [target2 ...]
        [RUNTIME DESTINATION dir]
        [LIBRARY DESTINATION dir]
        [ARCHIVE DESTINATION dir]
        [INCLUDES DESTINATION [dir ...]]
        [PRIVATE_HEADER DESTINATION dir]
        [PUBLIC_HEADER DESTINATION dir])

例如:

install(TARGETS MyExecutable RUNTIME DESTINATION bin)

10、条件语句 (if, elseif, else, endif 命令)

if(expression)
  # Commands
elseif(expression)
  # Commands
else()
  # Commands
endif()

例如:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  message("Debug build")
endif()

11、自定义命令 (add_custom_command 命令):

add_custom_command(
   TARGET target
   PRE_BUILD | PRE_LINK | POST_BUILD
   COMMAND command1 [ARGS] [WORKING_DIRECTORY dir]
   [COMMAND command2 [ARGS]]
   [DEPENDS [depend1 [depend2 ...]]]
   [COMMENT comment]
   [VERBATIM]
)

例如:

add_custom_command(
   TARGET MyExecutable POST_BUILD
   COMMAND ${CMAKE_COMMAND} -E echo "Build completed."
)

实例

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

cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)

# 添加源文件
add_executable(MyExecutable main.cpp)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

掌握这四个用法,基本简单的CMake文件也是建立起来了

2.2 变量和缓存

CMake 使用变量来存储和传递信息,这些变量可以在 CMakeLists.txt 文件中定义和使用。

变量可以分为普通变量和缓存变量。

变量定义与使用

定义变量:

set(MY_VAR "Hello World")

使用变量:

message(STATUS "Variable MY_VAR is ${MY_VAR}")

缓存变量

缓存变量存储在 CMake 的缓存文件中,用户可以在 CMake 配置时修改这些值。缓存变量通常用于用户输入的设置,例如编译选项和路径。

定义缓存变量:

set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable")

使用缓存变量:

message(STATUS "Cache variable MY_CACHE_VAR is ${MY_CACHE_VAR}")

2.3 查找库和包

CMake 可以通过 find_package() 指令自动检测和配置外部库和包。

常用于查找系统安装的库或第三方库。

find_package() 指令

基本用法:

find_package(Boost REQUIRED)

指定版本:

find_package(Boost 1.70 REQUIRED)

查找库并指定路径:

find_package(OpenCV REQUIRED PATHS /path/to/opencv)

使用查找到的库:

target_link_libraries(MyExecutable Boost::Boost)

设置包含目录和链接目录:

include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

使用第三方库

假设你想在项目中使用 Boost 库,CMakeLists.txt 文件可能如下所示:

实例

cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)

# 查找 Boost 库
find_package(Boost REQUIRED)

# 添加源文件
add_executable(MyExecutable main.cpp)

# 链接 Boost 库
target_link_libraries(MyExecutable Boost::Boost)

3. 总结

通过上述内容,用户可以了解 CMakeLists.txt 文件的基本结构和常用指令,掌握如何定义和使用变量,查找和配置外部库,从而能够有效地使用 CMake 管理项目构建过程。

如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~    

你的点赞就是猫猫更新的动力

本文转载自:CMake 基础 | 菜鸟教程


原文地址:https://blog.csdn.net/m0_67656158/article/details/143835252

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!