🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题
🍊专栏推荐:深度学习网络原理与实战
🍊近期目标:写好专栏的每一篇文章
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩
这两天闲来无事,准备补补自己糟糕的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 .
,构建成功后我们可以看到再文件夹中生成了许多的文件,如下:
最后我们通过make
命令进行编译,如下图所示:
编译结束后,可以看到生成了可执行文件hello。
接下来就可以使用./hello
命令来执行上述可执行文件,执行结果如下:
外部构建
上面的内容即为内部构建,可以看到,所有的的文件都会在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文件夹。
最后通过make
进行编译,会在bin文件夹生成可执行文件Hello
。
同样的,可以用./Hello
执行,得到结果如下:
参看文章:https://blog.csdn.net/qq_41375609/article/details/110535697
参考视频:https://www.bilibili.com/video/BV1vR4y1u77h?spm_id_from=333.337.search-card.all.click
\