CMake 入门教程

简介: CMake 入门教程

CMake 入门

这两天闲来无事,准备补补自己糟糕的C++知识。这篇文章可以对其有一个大概的认识C++入门基础🍋🍋🍋


后面又看到了CMake的相关知识,于是就学习了一下,不至于不知道CMake是什么🌷🌷🌷

CMake是什么

cmake允许开发者编写一种平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。cmake所有操作都是通过编译CMakeLists.txt来完成的


这里给出官网链接: www.cmake.org

 

内部编译

  首先我们新建一个文件夹【我新建的为CMake_01】,里面新建一个我们编写的代码文件main.cpp和 CMakeLists.txt 文件。文件结构如下:

.
├── CMakeList.txt
└── main.cpp

其中,我们在main.cpp中写入以下内容,即目标打印输出hello CMake

#include <iostream>
int main(){
std::cout << "hello CMake" <<std::endl;
}

在 CMakeLists.txt中写入下列内容:

PROJECT (HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})

对以上内容做解释如下:

  • PROJECT (HELLO) 这句表明我们指定的工程名称,是随便起的
  • SET(SRC_LIST main.cpp) 表示创建一个变量,名字叫SRC_LIST 。SRC_LIST 包含了main.cpp这个文件,使用${SRC_LIST}表示取出SRC_LIST 的值,其值就是main.cpp。
  • MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})表示向终端输出用户自定义的信息。
  • ADD_EXECUTABLE(hello ${SRC_LIST})表示生成可执行文件,生成的可执行文件名是hello,源文件读取变量SRC_LIST中的内容,即main.cpp。

写好这些我们就可以构建CMakeFiles文件了,在终端输入camke .,构建成功后我们可以看到再文件夹中生成了许多的文件,如下:fbd62a3fca4723b6f868d6ebd623156f.png

最后我们通过make命令进行编译,如下图所示:

b57bf10a46ad065aa51398463a7f0d03.png

编译结束后,可以看到生成了可执行文件hello。e79c71e3fe93021a631c92b73d9acd0c.png

接下来就可以使用./hello命令来执行上述可执行文件,执行结果如下:

7effeacacf25f6f36cdaabe7d794d30b.png

外部编译

上面的内容即为内部构建,可以看到,所有的的文件都会在CMake_01文件夹下生成,有很多的临时文件,清理麻烦,这时候往往使用外部构建,外部构建,会把生成的临时文件放在build目录下,不会对源文件有任何影响。


同样的,我们先来新建一个文件夹CMake_02,这里我们需要建立如下的目录结构:

.
├── build
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    └── main.cpp

  其中build文件夹用于存放构建生成的临时文件。src文件夹存放源代码,同时需要有一个CMakeLists.txt文件。

接下来可以看看每个文件中的内容,先看主目录下的CMakeLists.txt文件,内容如下:

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin) //这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
                          //表示将 src 子目录加入工程并指定编译输出(包含编译中间结果)路径为 bin 目录,bin目录会在构建时自己生成

src文件夹下的CMakeLists.txt文件内容如下:

ADD_EXECUTABLE(Hello main.cpp)    //main.cpp的内容和之前的一直


写好这些内容后,进入到build文件夹输入命令cmake ..进行构建,可以发现build文件夹下生成了各种临时文件,也生成了bin文件夹。8c4ca031bc7ba9ac1be58bd65e48ba18.png

最后通过make进行编译,会在bin文件夹生成可执行文件Hello3d63df1a26688722df1c77937f5681f4.png

同样的,可以用./Hello执行,得到结果如下:

e296e991d8b6eefabc5c438ae9df4248.png

参看文章:https://blog.csdn.net/qq_41375609/article/details/110535697


参考视频:https://www.bilibili.com/video/BV1vR4y1u77h?spm_id_from=333.337.search-card.all.click

相关文章
|
3月前
|
Dart IDE Unix
CMake 教程3
CMake 教程
38 1
|
3月前
|
缓存 Unix 程序员
CMake 教程1
CMake 教程
66 1
|
3月前
CMake 教程2
CMake 教程
24 0
|
5月前
|
缓存 存储 C++
面向 C++ 的现代 CMake 教程(一)(4)
面向 C++ 的现代 CMake 教程(一)
72 0
|
5月前
|
C++ 开发者 开发工具
面向 C++ 的现代 CMake 教程(四)(2)
面向 C++ 的现代 CMake 教程(四)
66 0
|
5月前
|
C++ 缓存 存储
面向 C++ 的现代 CMake 教程(一)(3)
面向 C++ 的现代 CMake 教程(一)
134 0
|
5月前
|
C++ 存储 JSON
面向 C++ 的现代 CMake 教程(五)(4)
面向 C++ 的现代 CMake 教程(五)
62 0
|
5月前
|
C++ 缓存 Unix
面向 C++ 的现代 CMake 教程(四)(4)
面向 C++ 的现代 CMake 教程(四)
49 0
|
5月前
|
C++ 容器 Docker
面向 C++ 的现代 CMake 教程(一)(1)
面向 C++ 的现代 CMake 教程(一)
134 0
|
5月前
|
C++ 存储 测试技术
面向 C++ 的现代 CMake 教程(五)(2)
面向 C++ 的现代 CMake 教程(五)
69 0
下一篇
无影云桌面