本地php网站搭建,怎么创建个人的网站,人工智能的网站,外国扁平化网站#x1f308; 个人主页#xff1a;十二月的猫-CSDN博客 #x1f525; 系列专栏#xff1a; #x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 #x1f4aa;#x1f3fb; 十二月的寒冬阻挡不了春天的脚步#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录
1.… 个人主页十二月的猫-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 targetPRE_BUILD | PRE_LINK | POST_BUILDCOMMAND command1 [ARGS] [WORKING_DIRECTORY dir][COMMAND command2 [ARGS]][DEPENDS [depend1 [depend2 ...]]][COMMENT comment][VERBATIM]
)
例如
add_custom_command(TARGET MyExecutable POST_BUILDCOMMAND ${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 基础 | 菜鸟教程