【CMake保姆级教程】CMake的使用

简介: 【CMake保姆级教程】CMake的使用

前言


在上节课我们已经讲了CMake的安装和简单使用,本节课我们来讲解CMake的命令和他的含义


CMake的使用


CMake支持大写、小写、混合大小写的命令。如果在编写CMakeLists.txt文件时使用的工具有对应的命令提示,那么大小写随缘即可,不要太过在意。


注释


注释行

注释行:

其实就是注释一行的内容和我们C/C++的//一样的功能。

CMake 使用 # 进行行注释,可以放在任何位置

# 这是一个 CMakeLists.txt 文件


注释块

注释块:

其实就是注释一行或者多行的内容,和我们C/C++的/**/一样的功能。

CMake 使用 #[[ ]] 形式进行块注释。

#[[ 这是一个 CMakeLists.txt 文件。
这是一个 CMakeLists.txt 文件
这是一个 CMakeLists.txt 文件]]


CMake操作


1、设置CMake的最低版本

cmake_minimum_required(VERSION 3.0.0)#设置cmake最低版本为3.0.0.0


2、定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。


定义工程名称语法:

# PROJECT 指令的语法是:
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
       [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
       [DESCRIPTION <project-description-string>]
       [HOMEPAGE_URL <url-string>]
       [LANGUAGES <language-name>...])


常见的使用如下:

project(test)


3、定义工程会生成一个可执行程序
使用add_executable定义工程会生成一个可执行程序。

#样式1
add_executable(生成的可执行文件名称 1.c 2.c n.c)#源文件中间使用空格隔开
#样式2
add_executable(生成的可执行文件名称 1.c;2.c;n.c)#源文件中间使用 ";"隔开


共处一室


cmake测试文件:

cmake_minimum_required(VERSION 3.0.0)
project(test)
add_executable(app main.c func.c)


当源文件像下面这样,在同一个文件夹下,并且生成的cmake文件也在一个文件夹这就叫共处一室。

未执行cmake前:

├── CMakeLists.txt
├── func.c
└── main.c


使用cmake .make执行后

就会多出很多文件↓

├── app#new file
├── CMakeCache.txt#new file
├── CMakeFiles#new file
│   ├── 3.22.1
│   │   ├── CMakeCCompiler.cmake
│   │   ├── CMakeCXXCompiler.cmake
│   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   ├── CMakeSystem.cmake
│   │   ├── CompilerIdC
│   │   │   ├── a.out
│   │   │   ├── CMakeCCompilerId.c
│   │   │   └── tmp
│   │   └── CompilerIdCXX
│   │       ├── a.out
│   │       ├── CMakeCXXCompilerId.cpp
│   │       └── tmp
│   ├── app.dir#new file
│   │   ├── build.make
│   │   ├── cmake_clean.cmake
│   │   ├── compiler_depend.make
│   │   ├── compiler_depend.ts
│   │   ├── DependInfo.cmake
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── func.c.o
│   │   ├── func.c.o.d
│   │   ├── link.txt
│   │   ├── main.c.o
│   │   ├── main.c.o.d
│   │   └── progress.make
│   ├── cmake.check_cache
│   ├── CMakeDirectoryInformation.cmake
│   ├── CMakeOutput.log
│   ├── CMakeTmp
│   ├── Makefile2
│   ├── Makefile.cmake
│   ├── progress.marks
│   └── TargetDirectories.txt
├── cmake_install.cmake#new file
├── CMakeLists.txt
├── func.c
├── main.c
└── Makefile#new file


最终可执行程序app就被编译出来了(这个名字是在CMakeLists.txt中指定的)。


VIP 包房


通过上面的例子可以看出,如果在CMakeLists.txt文件所在目录执行了cmake命令之后就会生成一些目录和文件(包括 makefile 文件),如果再基于makefile文件执行make命令,程序在编译过程中还会生成一些中间文件和一个可执行文件,这样会导致整个项目目录看起来很混乱,不太容易管理和维护,此时我们就可以把生成的这些与项目源码无关的文件统一放到一个对应的目录里边,比如将这个目录命名为build:

├── build
├── CMakeLists.txt
├── func.c
└── main.c


使用cd build/命令打开他。

a2a152c4c7454608bfdcf8be824d3f3c.png


使用cmake ..命令执行cmake因为CMakeLists.txt在上级目录,所以使用cmake ..

0d9287734dc44905b93c15de7bf7b864.png


像这样就是好了。

直接在本目录执行make命令生成可执行文件

9dad395c257047048c5905019d618473.png

使用tree命令,得到下面的东西:

├── app
├── CMakeCache.txt
├── CMakeFiles
│   ├── 3.22.1
│   │   ├── CMakeCCompiler.cmake
│   │   ├── CMakeCXXCompiler.cmake
│   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   ├── CMakeSystem.cmake
│   │   ├── CompilerIdC
│   │   │   ├── a.out
│   │   │   ├── CMakeCCompilerId.c
│   │   │   └── tmp
│   │   └── CompilerIdCXX
│   │       ├── a.out
│   │       ├── CMakeCXXCompilerId.cpp
│   │       └── tmp
│   ├── app.dir
│   │   ├── build.make
│   │   ├── cmake_clean.cmake
│   │   ├── compiler_depend.internal
│   │   ├── compiler_depend.make
│   │   ├── compiler_depend.ts
│   │   ├── DependInfo.cmake
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── func.c.o
│   │   ├── func.c.o.d
│   │   ├── link.txt
│   │   ├── main.c.o
│   │   ├── main.c.o.d
│   │   └── progress.make
│   ├── cmake.check_cache
│   ├── CMakeDirectoryInformation.cmake
│   ├── CMakeOutput.log
│   ├── CMakeTmp
│   ├── Makefile2
│   ├── Makefile.cmake
│   ├── progress.marks
│   └── TargetDirectories.txt
├── cmake_install.cmake
└── Makefile


我们发现app我们指定的可执行文件就在这里。

我们使用./app去执行他

bec536c3d0b044fd9a0cc3e781955222.png

这时就执行出我们的东西了

相关文章
|
9月前
|
Windows
CMake基础(5)安装项目
CMake基础(5)安装项目
97 3
|
6月前
|
Dart IDE Unix
CMake 教程3
CMake 教程
75 1
|
6月前
CMake 教程2
CMake 教程
39 0
|
7月前
|
自然语言处理 Linux C++
make和Cmake都有什么区别?(内附使用详解)
make: 是一个构建工具,它的任务是读取 Makefile 文件,并基于这些文件中的指令执行具体的构建操作。Makefile 文件包含了如何构建项目的规则,make 负责解析这些规则并执行必要的命令来编译和链接源代码,生成可执行文件或库。 CMake: 是一个构建系统生成器。它并不直接进行编译或链接,而是根据项目中 CMakeLists.txt 文件的内容生成一个或多个构建系统的描述文件(如 Makefile 或 Visual Studio 解决方案)。CMake 提供了一种更高级、更抽象的方式来描述构建过程,这使得它能够跨平台地生成各种构建系统。
653 0
|
9月前
|
编译器 Shell Linux
|
IDE Ubuntu Linux
【CMake保姆级教程】CMake图文安装教程
【CMake保姆级教程】CMake图文安装教程
749 0
|
8月前
|
C++ 存储 测试技术
面向 C++ 的现代 CMake 教程(五)(2)
面向 C++ 的现代 CMake 教程(五)
87 0
|
8月前
|
C++ 存储 JSON
面向 C++ 的现代 CMake 教程(五)(4)
面向 C++ 的现代 CMake 教程(五)
77 0
|
8月前
|
C++ 测试技术 开发工具
面向 C++ 的现代 CMake 教程(五)(1)
面向 C++ 的现代 CMake 教程(五)
70 0
|
8月前
|
C++ 开发者 缓存
面向 C++ 的现代 CMake 教程(四)(1)
面向 C++ 的现代 CMake 教程(四)
96 0

热门文章

最新文章