CMake良心教程(1)手把手教你入门!

目录

一.CMake是什么?有什么用?

二.环境配置

2.1CMake安装

 2.2MinWG安装

三.构建最小项目

3.1项目的构建

3.2外部构建与内部构建

四.CMakeLists.txt语法介绍

4.1 project关键字

4.2 set 与 PROJECT_NAME

4.3 MESSAGE关键字

4.4 ADD_EXECUTABLE关键字

五.语法的基本原则

六.语法注意事项


一.CMake是什么?有什么用?

如果想要真正的了解一个人,那我们第一眼看到的肯定是人的轮廓。知识也是同理,所以我会先介绍CMake的大体轮廓。

想要了解CMake是干什么的,我们首先要知道一个源文件的编译过程。

  • 1.用编辑器编写源代码,如.c文件。
  • 2.用编译器编译代码生成目标文件,如.o。
  • 3.用链接器连接目标代码生成可执行文件,如.exe。

但如果源文件太多,一个一个编译那得多麻烦啊?于是人们想到,为啥不设计一种类似批处理的程序,来批处理编译源文件呢?

于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。

对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。

综上我们现在可以把CMake看作是用于产生Makefiles文件的工具。

二.环境配置

我的环境是 Windows10 + CMake + MinGW,MinGW 就是 GCC 的 Windows 移植版本。所以本文就以我的环境来进行讲解。

2.1CMake安装

安装链接:CMake官网安装

根据个人需求选择适当的版本进行下载,其中包含许多不同版本。

【重要提示】请确认你的计算机操作系统类型,以及是32位还是64位。(附注:x86表示32位系统;x64表示64位系统)CMake良心教程(1)手把手教你入门!_第1张图片

下载完成后,双击进行安装。 

下载完成后,单击“Next”按钮,在下图中勾选“I accept the terms in the License
Agreement”复选框接受许可协议:

CMake良心教程(1)手把手教你入门!_第2张图片

选中“Add CMake to the system PATH for all users”单选按钮添加系统路径变量。也可以同时勾选“CreateCMakeDesktopIcon”复选框,以便在安装完成后在桌面上创建CMake的快捷方式图标。

CMake良心教程(1)手把手教你入门!_第3张图片

点击Install进行安装。

安装完成后,进入Windows系统环境变量设置对话框,如下图所示。可以看到,由于刚才的设置CMake已经自动将其安装路径“D:\Program Files\CMake\bin” 写入环境变量Path中。

CMake良心教程(1)手把手教你入门!_第4张图片

 重启电脑后,打开cmd黑窗,输入cmake,能够显示cmake的一些信息即为安装成功,如下图:

CMake良心教程(1)手把手教你入门!_第5张图片

 2.2MinWG安装

下载地址:MinWG官网下载

点击上面链接,进入下图1后将页面往下滑到图2区域,点击所需离线包名称:

(Version: 指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。最高版本是8.1.0 ,选中它即可

选默认

Architechture:电脑系统是 64位的,选择 x86_64;如果是 32位 系统,则选择 i686

选x86_64

Threads:如果是 Windows ,选择 win32 ,如果是 Linux、Unix、Mac OS 等其他操作系统要选择 posix

选win32

Exception:seh 是新发明的,而 sjlj 则是古老的。seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。

建议64位操作系统选择seh

选seh)

,然后就会弹出图3所示对话框,保存下载即可。离线包大约50MB(解压后500MB左右),下载一般只需半个小时,具体视乎网速情况而定。

CMake良心教程(1)手把手教你入门!_第6张图片

 CMake良心教程(1)手把手教你入门!_第7张图片

CMake良心教程(1)手把手教你入门!_第8张图片

 下载完成解压后的界面是这样的

CMake良心教程(1)手把手教你入门!_第9张图片

 环境变量配置:

设置->搜索高级系统设置->环境变量->path->新建,将MinGW-w64包目录下bin文件夹的全路径粘贴到后面,bin的后面有无斜杠均可,如下图:

CMake良心教程(1)手把手教你入门!_第10张图片

 CMake良心教程(1)手把手教你入门!_第11张图片

CMake良心教程(1)手把手教你入门!_第12张图片 CMake良心教程(1)手把手教你入门!_第13张图片

 CMake良心教程(1)手把手教你入门!_第14张图片

 至此环境就安装完毕。

三.构建最小项目

3.1项目的构建

最基本的项目是将一个源代码文件生成可执行文件。对于这么简单的项目,只需要一个三行的 CMakeLists.txt 文件即可,这是本篇教程的起点。在Test目录中创建一个 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.15)

project(test)

add_executable(Test test.c)

  1. cmake_minimum_required(VERSION 3.15): 这一行指定了编译这个项目所需的CMake的最低版本。在这个例子中,这个项目需要3.15或者更高版本的CMake。

  2. project(test): 这一行定义了项目的名字,这里的项目名字是“test”。CMake将会创建一些变量,比如test_SOURCE_DIRtest_BINARY_DIR,以便在项目内部使用。

  3. add_executable(Test test.c): 这一行告诉CMake创建一个叫做“Test”的可执行文件,源文件是test.c。CMake将自动找到正确的编译器(在这种情况下,是C编译器)来编译test.c,然后链接生成名为“Test”的可执行文件。

注意,此示例在 CMakeLists.txt 文件中使用小写命令。CMake 支持大写、小写和混合大小写命令。

test.c文件在 Test 目录中 :

#include
int main(){
printf("hello dxm");
return 0;
}

现在就可以构建和运行我们的项目了,就是先运行 cmake 命令来构建项目,然后使用你选择的编译工具进行编译。

先从命令行进入到Test目录,并创建一个构建目录 build,接下来,进入 build 目录并运行 CMake 来配置项目,并生成构建系统:

CMake良心教程(1)手把手教你入门!_第15张图片

依次解释:

1. cd C:\Users\86137\Desktop\Test 目的是切换到Test目录下

2.mkdir build 创建一个构建目录 build

3.cd build 进入 build 目录

4.cmake -G "MinGW Makefiles" ..  这个命令的意思是在当前目录生成一个用于MinGW的Makefile,它会根据位于上级目录的源代码来设置Makefile的内容。然后你就可以使用MinGW的make命令来编译你的项目了。

5.cmake --build . --build 指定编译生成的文件存放目录,其中就包括可执行文件,. 表示存放到当前目录。

6.Test.exe 可以看到执行出了正确结果

此时目录结构为:

Test/
    build/
    CMakeLists.txt
    test.cpp

3.2外部构建与内部构建

这里创建了一个 build 目录存放编译产物,可以避免编译产物与代码文件混在一起,这种叫做外部构建。

还有一种内部构建,即直接在项目根目录下进行构建系统与编译,这时构建和编译命令就更改为:

cmake -G"MinGW Makefiles" .
cmake --build .

内部构建会使得项目文件很混乱,一般直接用外部构建即可。 到这里我们的第一个CMake项目就完成了。

四.CMakeLists.txt语法介绍

4.1 project关键字

  • 用来设置项目的名字和支持的语言,默认支持所有语言
project(demo)
project(demo CXX) 

第二行代表指定工程名为demo,支持语言是C++ 

最好写上,它会引入两个变量 demo_BINARY_DIR 和 demo_SOURCE_DIR,同时,cmake 自动定义了两个等价的变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。

4.2 set 与 PROJECT_NAME

这是上文的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.15)

project(test)

add_executable(Test test.c)

指定了项目名后,后面可能会有多个地方用到这个项目名,如果更改了这个名字,就要改多个地方,比较麻烦,那么可以使用 PROJECT_NAME 来表示项目名。

add_executable(${PROJECT_NAME} test.cpp)

生成可执行文件需要指定相关的源文件,如果有多个,那么就用空格隔开,比如:

add_executable(${PROJECT_NAME} a.cpp b.cpp c.cpp)

我们也可以用一个变量来表示这多个源文件:

set(SRC_LIST a.cpp b.cpp c.cpp)
add_executable(${PROJECT_NAME} ${SRC_LIST})

 set 命令指定 SRC_LIST 变量来表示多个源文件,用 ${var_name} 获取变量的值。

  • 设置变量

1.set 直接设置变量的值

set(SRC_LIST main.cpp test.cpp)
add_executable(demo ${SRC_LIST})

2. set 追加设置变量的值

set(SRC_LIST main.cpp)
set(SRC_LIST ${SRC_LIST} test.cpp)
add_executable(demo ${SRC_LIST})

于是原来的 CMakeLists.txt 文件就可以变成如下所示:

cmake_minimum_required(VERSION 3.15)

project(Test)

SET(SRC_LIST test.cpp)

add_executable(${PROJECT_NAME} ${SRC_LIST})

这样看起来就很简洁。

4.3 MESSAGE关键字

message关键字用于向用户显示一些消息。这可能是一些调试信息、警告或者错误信息。基本的使用格式如下:

message([] "message text" ...)

其中用于指定消息的类型,可以是以下几种:

  • (none): 等同于 STATUS,这是默认选项,消息会打印到 stderr。
  • STATUS: 普通信息,打印出一些状态消息,例如提示用户某个操作正在进行。该消息会被 CMake GUI 和 ctest -S 脚本捕获。
  • WARNING: 警告信息,但不会停止处理。
  • AUTHOR_WARNING: 类似于 WARNING,但可以通过设置 CMAKE_SUPPRESS_DEVELOPER_WARNINGS 变量来抑制,以避免对最终用户的干扰。
  • SEND_ERROR: 类似于 ERROR,但处理过程会继续进行。它会在 CMake 运行过程中立即显示错误消息,并将错误标记在生成过程中。
  • FATAL_ERROR: 严重错误信息,遇到此类信息将会停止所有的 CMake 运行过程。

以下是几个 message 的示例:

message(STATUS "This is a status message. It is used for providing information.")
message(WARNING "This is a warning message. It can be used to convey important information.")
message(FATAL_ERROR "This is a fatal error. It will stop the processing of CMake.")

这些信息可以在你运行 cmake 命令时在命令行中看到,帮助你了解你的配置文件的状态或者是出现的错误。

4.4 ADD_EXECUTABLE关键字

在CMake中,ADD_EXECUTABLE是一个关键指令,它被用来从指定的源代码文件创建一个可执行文件。

ADD_EXECUTABLE的基本语法如下:

ADD_EXECUTABLE(executable_name source1 source2 ... sourceN)

在这个语法中:

  • executable_name是你希望创建的可执行文件的名称。这个名字不包含任何后缀,例如“.exe”。CMake会根据目标系统自动添加适当的后缀。
  • source1, source2, ..., sourceN是你希望包含在可执行文件中的源代码文件。这些文件可以是C,C++或者其他CMake支持的编程语言的源代码文件。

例如,如果你有一个C++项目,其中包含两个源文件main.cppfunctions.cpp,并且你想将这个项目编译成名为myProgram的可执行文件,那么你可以使用以下的CMake指令:

ADD_EXECUTABLE(myProgram main.cpp functions.cpp)

请注意,ADD_EXECUTABLE只会创建可执行文件的构建规则,但并不会真正执行编译。实际的编译过程会在你运行make或者与你的构建系统相对应的命令时进行。

五.语法的基本原则

  • 变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
  • 指令(参数1 参数2...)参数使用括弧括起,参数之间用空格或分号分开。
  • 指令是大小写无关的,参数和变量是大小写有关的。但推荐全部使用大写。

六.语法注意事项

  • SET(SRC_LIST main.cpp) 可以写成SET(SRC_LIST "main.cpp") ,如果源文件名字中含有空格,就必须要加双引号。
  • ADD_EXECUTABLE(hello main)后缀可以不写,他会自动去找.c和.cpp,最好不要这么写,容易产生误导。 

注:本节先到这里,下一节进入实操,让你的代码看起来更像一个工程。 

你可能感兴趣的:(linux,运维,服务器)