CMake详细教程:从入门到实践
创作时间:
作者:
@小白创作中心
CMake详细教程:从入门到实践
引用
CSDN
1.
https://blog.csdn.net/2401_87555613/article/details/143639112
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile 或者 project 文件,CMake 的配置文件取名为CMakeLists.txt。也就是在CMakeLists.txt这个文件中写 cmake 代码。简单理解,cmake 就是将多个 cpp、hpp 文件组合构建为一个大工程的语言。
CMakeLists.txt文件详解
1.1 CMakeLists简介
CMakeLists是有条理的gcc编译命令的文件,利用make工具来执行CMakeLists文件的编译指令。
# 设置cmake最低版本
cmake_minimum_required(VERSION 3.2)
# project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)
project(xxx)
# 获取路径下所有的.cpp/.c/.cc文件(不包括子目录),并赋值给变量中
aux_source_directory(路径 变量)
# GLOB_RECURSE 获取目录下的所有cpp文件(不包括子目录),并赋值给SOURCES
file(
GLOB SOURCES
${PROJECT_SOURCE_DIR}/*.c
)
# GLOB_RECURSE 获取目录下的所有cpp文件(包括子目录),并赋值给NATIVE_SRC
file(
GLOB_RECURSE NATIVE_SRC
${PROJECT_SOURCE_DIR}/lib/*.cpp
)
# 设置变量,给文件名/路径名或其他字符串起别名,用${变量}获取变量内容
set(变量 文件名/路径/...)
# 添加编译选项FOO BAR
add_definitions(-DFOO -DBAR ...)
# add_compile_definitions定义宏,这种方式可以给宏具体值,但是这个指令只要高版本的cmake支持
add_compile_definitions(MG_ENABLE_OPENSSL=1)
# 打印消息
message(消息)
# 编译子文件夹的CMakeLists.txt
add_subdirectory(子文件夹名称)
# 将.cpp/.c/.cc文件生成.a静态库
add_library(库文件名称 STATIC 文件)
# 将.cpp/.c/.cc文件生成可执行文件
add_executable(可执行文件名称 文件)
# 规定.h头文件路径
include_directories(路径)
# 规定.so/.a库文件路径
link_directories(路径)
# 设置编译选项及默认值
option(TEST_DEBUG "option for debug" OFF)
# 对add_library或add_executable生成的文件进行链接操作
target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称)
1.2 CMakeLists.txt文件结构
project(xxx) #必须
add_subdirectory(子文件夹名称) #父目录必须,子目录不必
add_library(库文件名称 STATIC 文件) #通常子目录(二选一)
add_executable(可执行文件名称 文件) #通常父目录(二选一)
include_directories(路径) #必须
link_directories(路径) #必须
target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称) #必须
1.3 CMakeLists.txt示例
# 指定cmake版本
cmake_minimum_required(VERSION 3.0)
# 设置项目名称
project(SOLIDERFIRE)
# 添加编译参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -Wall")
# 设置代码构建级别为 Debug 方式
set(CMAKE_BUILD_TYPE Debug)
# 包含目录
include_directories(${CMAKE_SOURCE_DIR}/include)
# 编译
add_executable(a.out main.cpp src/Gun.cpp src/Solider.cpp)
1.4 build文件夹
为了简单起见,cmake 采用 out-of-source 方式构建(即生成中间产物与源代码分离),即创建 build 文件夹用于编译。
mkdir build
cd build
cmake ..
make -j$(nproc)
+
|
+--- main.c
+--- CMakeLists.txt
|
/--+ build/
|
+--- hello(exec)
CMake工具详解
2.1 CMake工具简介
CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile 或者 project 文件,CMake 的配置文件取名为CMakeLists.txt。也就是在CMakeLists.txt这个文件中写 cmake 代码。简单理解,cmake 就是将多个 cpp、hpp 文件组合构建为一个大工程的语言。
cmake 编写的过程实际上是编程的过程,每个项目使用一个CMakeLists.txt(每个目录一个),使用的是 cmake 语法。
2.2 CMake工具优势
- 跨平台,并可以生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile;在苹果平台可以生成 Xcode;在Windows 平台,可以生成 MSVC 的工程文件。
- 能够管理大型项目。
- 简化编译构建过程和编译过程。cmake 的工具链非常简单:cmake + make。
- 可扩展,可以为 cmake 编写特定功能的模块,扩展 cmake 功能。
2.3 CMake跨平台
cmake中有一个概念叫 cmake generator生成器,cmake生成器支持不同的生成器,例如:Makefile系列、Ninja系列等。要产生Ninja,加上 -G Ninja 即可:
cmake -G Ninja
但cmake提供了一个统一的命令接口,不管底层是啥,直接用以下指令即可:
cmake --build .
简单理解,不管你用什么生成器,cmake都能正确构建,实现真正的跨平台。
2.4 cmake编译
cmake --build . --config Release --target check
2.5 make编译
# 多线程编译
make -j4 -l4
参数解释
热门推荐
《诗经》里的爱情,连孔子都点赞?
三色藜麦的功效与作用及禁忌
叫麦不是麦,这种食材营养成分太优秀了!
比燕麦升糖指数还低!藜麦:如何成为糖尿病人餐桌上的新明星?
哈尔滨锅包肉的糖醋汁传奇
锅包肉糖醋汁的完美调配比例,东北名菜的秘诀大揭秘!
氢原子揭秘:量子力学的核心
普通话声调入门指南:从理论到实践的全面解析
汉字拼音学习指南:掌握拼音开启中文之旅
赛博小马甲教你融合赛博朋克与克苏鲁元素
赛博小马甲教你写出高甜双向奔赴
古巴风情下的拉丁舞起源揭秘
拉丁舞治愈力爆棚,学生党必看!
健身房拉丁舞:燃脂塑形新潮流
桑巴、恰恰与伦巴:谁是拉丁舞界的人气王?
定西市陇西县的饕餮盛宴,满足你对西北美食的一切想象
自制希腊干噎酸奶【健康无添加剂】
我的世界马铃薯怎么做
鼬和黄鼠狼的区别(黄鼠狼全身是宝,为何无人敢养?)
《绝地求生》决赛圈心态调整秘籍:克服紧张情绪,提升比赛表现
绝地求生高手教你:高效移动与隐蔽技巧全攻略
四倍镜和98k助你《绝地求生》高手之路
《绝地求生》29.1版本更新:荣都地图与地形可破坏机制详解
《绝地求生》新手生存秘籍,助你快速吃鸡!
欧罗巴 阿尔克马尔VS罗马:比赛分析
欧罗巴 阿尔克马尔VS罗马:比赛分析
欧罗巴焦点战:阿尔克马尔主场迎战罗马,谁将占据出线主动权?
冬天干燥,早餐多吃它,滋阴养颜还低脂,跟便秘说拜拜!
《绝地求生》键位优化攻略:职业玩家设置方案+迅游加速器使用指南
绝地求生新手必学:WASD键操作秘籍