Intent
自己在实习过程中经常会用到CMAKE,但是对cmake并没有一个很好的认知,所以写这篇博客进行记录,面向小白介绍cmake使用,实现自己组织c++文件的目标
cmake不是必须要用的情况下请不要学习,只有必须要使用了,有使用cmake的需求了才需要学习,否则会学了忘学了忘,别想着学了之后能装b
另: cmake语法无穷无尽,学不完,所以需要用啥学啥就行,求你别较真
必知概念
小白们在最初写cpp文件的时候都是去使用vs这种高度自动化的工具的,vs在底层隐藏了许多编译/链接/编译工具链的操作,所以在学生时代写的代码才能一键编译生成.
- 编译工具链
披着clion的外衣实则在讲cmake()
这个视频非常好,我是看了第4遍才完全理解,初学时只需要看15min-60min的编译工具链讲解部分(不要多看,多看脑子会乱) - 预处理 g++ -E xxx.cpp -o xxx.i
- 编译 g++ -S xxx.i -o xxx.s
- 汇编 g++ -c xxx.s -o xxx.o
- 链接 g++ xxx.o yyy.o -o zzz
【CMake第三讲】:CMake大一统
国外大佬C++技术教程,油管百万级收藏,学C++看这个就够了!(中文字幕)-哔哩哔哩
一定要清楚这些概念才能继续向下看
CMAKE
不同平台有不同平台的makefile版本,所以为了屏蔽掉这种makefile的差异性,我们使用cmake站在更高的层级对文件进行管理,从而可以使用一个CMakeLists.txt在不同平台运行.
btw 首先清楚一点, cmake就是一坨答辩, 但是在工作中不得不吃这坨答辩,正所谓钱难赚, 那啥难吃
CMAKE届的helloworld
cmake_minimum_required(VERSION 3.20)
project(helloworld)
add_executable(${PROJECT_NAME} main.cpp)
-
cmake_minimum_required(VERSION 3.20)
定义本CMakeLists.txt所需最小的cmake版本 -
project(helloworld)
定义 PROJECT_NAME 变量 为 helloworld -
add_executable(${PROJECT_NAME} main.cpp)
生成一个名为{PROJECT_NAME}的可执行文件,这个可执行文件是用main.cpp文件生成的