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

举报
人才程序员 发表于 2023/07/26 11:26:11 2023/07/26
【摘要】 @TOC 前言在上节课我们已经讲了CMake的安装和简单使用,本节课我们来讲解CMake的命令和他的含义 CMake的使用CMake支持大写、小写、混合大小写的命令。如果在编写CMakeLists.txt文件时使用的工具有对应的命令提示,那么大小写随缘即可,不要太过在意。 注释 注释行注释行:其实就是注释一行的内容和我们C/C++的//一样的功能。CMake 使用 # 进行行注释,可以放在任...

@TOC


前言

在上节课我们已经讲了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
  1. 定义工程名称,并可指定工程的版本、工程描述、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)
  1. 定义工程会生成一个可执行程序
    使用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/命令打开他。
在这里插入图片描述

使用cmake ..命令执行cmake因为CMakeLists.txt在上级目录,所以使用cmake ..
在这里插入图片描述
像这样就是好了。

直接在本目录执行make命令生成可执行文件
在这里插入图片描述
使用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去执行他
在这里插入图片描述
这时就执行出我们的东西了

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。