CMake 入门教程

举报
秃头小苏 发表于 2022/05/22 10:48:41 2022/05/22
【摘要】  🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题🍊往期回顾:卡尔曼滤波系列1——卡尔曼滤波🍊近期目标:拥有2000粉丝🍊支持小苏:点赞👍🏼、收藏⭐、留言📩 @[toc]  CMake 入门   这两天闲来无事,准备补补自己糟糕的C++知识。这篇文章可以对其有一个大概的认识C++入门基础🍋🍋🍋   后面又看到了CMake的相关知识,于是就学习了一下,不至于不知道CMak...

 

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:卡尔曼滤波系列1——卡尔曼滤波

🍊近期目标:拥有2000粉丝
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

@[toc]
 

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

image-20220412111719262

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

image-20220412111824415

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

image-20220412111921600

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

image-20220412112041999

 

外部编译

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

image-20220412124236077

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

image-20220412124404440

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

image-20220412124505804

 
 

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

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

 
 
如若文章对你有所帮助,那就🛴🛴🛴

咻咻咻咻~~duang~~点个赞呗

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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