Cmake学习笔记

cmake的使用场景和功能:cmake 的诞生主要是为了解决直接使用 make+Makefile 这种方式无法实现跨平台的问题 ,所以 cmake 是可以实现跨平台的编译工具**这是它最大的特点。**cmake 仅仅只是根据不同平台生成对应的 Makefile,最终还是通过 make工具来编译工程源码,但是 cmake 却是跨平台的

所以需要我们需要修改CMakeLists.txt文件,最后编译出Makefile

复制代码
cmake --version
cmake ./
//检查版本和运行cmakelist.txt

执行完 cmake 之后,除了源文件 main.c 和 CMakeLists.txt 之外,可以看到当前目录下生成了很多其它的文件或文件夹,包括: CMakeCache.txt、 CmakeFiles、 cmake_install.cmake、 Makefile

通常是建立一个build文件夹,cmake ../让cmake产生的文件都在一个目录下,就不会看起来混乱

Cmake常用命令介绍

1、

add_executable(hello ./main.c)

add_executable 同样也是一个命令,用于生成一个可执行文件, 在本例中传入了两个参数,第一个参数表示生成的可执行文件对应的文件名,第二个参数表示对应的源文件; add_executable(hello ./main.c)表示需要生成一个名为 hello 的可执行文件,所需源文件为当前目录下的 main.c。

add_subdirectory告诉 cmake 去指定的目录中寻找 源码并执行CMakeLists.txt

复制代码
# 告诉 cmake 去 src 目录下寻找 CMakeLists.txt
add_subdirectory(src)

2、add_library 命令和 target_link_libraries 命令

add_library 命令用于生成库文件,在本例中我们传入了两个参数,第一个参数表示库文件的名字,需要注意的是,这个名字是不包含前缀和后缀的名字;在 Linux 系统中,库文件的前缀是 lib,动态库文件的后缀是.so,而静态库文件的后缀是.a;最终生成的库文件对应的名字会自动添加上前缀和后缀。

复制代码
add_library(libhello SHARED hello.c) #生成动态库文件
add_library(libhello STATIC hello.c) #生成静态库文件
add_executable(hello main.c)#可执行文件hello
target_link_libraries(hello liblibhello)#指定依赖库

target_link_libraries 命令为目标指定依赖库 ,hello.c 被编译为库文件, 并将其链接进 hello 程

4.aux_source_directory查找指定目录所以1文件添加成一个变量

.Cmake的命令,刚刚的add_library就是命令。在 CMakeLists.txt 中,命令名不区分大小写,可以使用大写字母或小写字母书写命令名

复制代码
# 查找 src 目录下的所有源文件
aux_source_directory(src SRC_LIST)
message("${SRC_LIST}") # 打印 SRC_LIST 变量

5、include_directories指定头文件搜索路径

如果需要包含多个头文件时,可以把头文件放在同一个文件夹中,当调用 add_subdirectory 命令加载子源码时, 会将 include_directories 命令包含的目录列表向下传递给子源码(子源码从父源码中继承过来)

复制代码
include_directories(include)
add_executable(hello main.c)

4.Cmake的变量

#设置变量 MY_VAL

set(MY_VAL "Hello World!")

#引用变量 MY_VAL

message(${MY_VAL})

相关推荐
SmartRadio29 分钟前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
wxr061641 分钟前
GOF笔记
笔记·适配器·ooad
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
好奇龙猫2 小时前
【AI学习-comfyUI学习-三十二节-FLXU原生态反推+controlnet depth(UNion)工作流-各个部分学习】
人工智能·学习
童话名剑2 小时前
锚框 与 完整YOLO示例(吴恩达深度学习笔记)
笔记·深度学习·yolo··anchor box
好奇龙猫3 小时前
【大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(7)】
学习
j_jiajia3 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
2301_783360134 小时前
关于RNAseq——从fastq到gene_counts全流程
笔记·学习
_李小白4 小时前
【AlohaMini学习笔记】第三天:AlohaMini相关技术
笔记·学习
我命由我123454 小时前
Photoshop - Photoshop 工具栏(57)模糊工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop