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 .,构建成功后我们可以看到再文件夹中生成了许多的文件,如下:

picture.image

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

picture.image

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

picture.image

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

picture.image

外部构建

上面的内容即为内部构建,可以看到,所有的的文件都会在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文件夹。

picture.image

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

picture.image

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

picture.image

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

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

\

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论