Loading

Cmake入门学习

学习C++时候需要做一个小项目,但是无法使用多目录多文件,上网搜索Cmake没用很详细的文字讲解,看过一个up主的视频之后,学习了如何去使用Cmake来进行简单的编译项目。Cmake基本使用

视频在结尾

1.安装

可以去两个网站下载:

官网(可能需要魔法):CMake

image.png

image.png

之后下载即可,作者这里已经安装,不做演示

GitHub: CMake (github.com)

github安装

image.png

接着在vscode中找到两个插件:Cmake和Cmake Tools,安装Cmake自动安装Cmake Tools

image.png

2.基本使用

如果碰到

2.1单目录多文件编译

创建一个CMakeLists.txt文件,并与main.cpp保存在同一个目录下

目录结构如下:

image.png

.vscode文件夹是配置调试功能的

接着打开CMakeLists.txt文件进行编写

# CMake最低版本号要求
cmake_minimum_required(VERSION 3.1)
# 项目信息
project(Demo1) # 写入工程名
# 指定生成目标
# 生成exe文件名,需要编译的源函数文件名称
add_executable(my_cmake_workerManger main.cpp workerManger.cpp) 

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。#符号 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

对于上面的 CMakeLists.txt 文件,依次出现了几个命令:

  1. cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
  2. project:参数值是 ,该命令表示项目的名称是 :Demo1
  3. add_executable: 将名为 main.cpp 的源文件编译成一个名称为 Demo1 的可执行文件。

2.1.1编译项目

在vscode执行,需要使用ctrl+shift+p来执行配置

image.png

image.png

在执行配置之后,会生成一个build的文件夹,里面会有一些配置文件

image.png

生成build之后,在终端使用cd build文件夹,进入build,执行cmake ..命令

注意:如果电脑上已经安装了VS,应该会调用微软MSVC编译器,使用(cmake -G "MinGW Makefiles" ..)代替(cmake ..)即可。
仅第一次使用cmake时使用(cmake -G "MinGW Makefiles" ..) 后面可使用(cmake ..)

结果如下:

PS E:E:\Program\program\C++\VSC_C++_Projects\Project1> cd .\build\
PS E:E:\Program\program\C++\VSC_C++_Projects\Project1\build> cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: E:/Program/program/C++/VSC_C++_Projects/Project1/build
PS E:E:\Program\program\C++\VSC_C++_Projects\Project1\build>

接着在命令行输入mingw32-make.exe,编译文件链接文件,结果如下:

image.png

文件结构如下,生成了my_cmake_workerManger.exe

image.png

3.2 多目录,多个源文件(推荐)

创建一个include目录,用于存放头文件,创建一个src目录,用来存放源文件,在创建一个bin目录,将生成的可执行文件存放到这里;将workerManger.cpp,移动到src目录,将workerManger.h移动到include目录,如下图所示:

image.png

并且对于多目录多文件,可以分别在项目根目录以及src目录里各编写一个 CMakeLists.txt 文件方便调用。

打开根目录的CMakeList.txt,写入:

# CMake最低版本号要求
cmake_minimum_required(VERSION 3.1)

# 项目信息
project(Demo) # 工程名

# 指定子目录的CMake源文件
add_subdirectory(src)

添加了一个新命令add_subdirectory这个是用来指定子目录的CMake源文件。

打开src目录下的CMakeList.txt,写入:

# 如果需要进行调试需要设置这个命令
set(CMAKE_BUILD_TYPE Debug)
# 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔
# 相当于指定g++编译器的-I参数
include_directories (${CMAKE_SOURCE_DIR}/include)
# 把当前目录下的源文件存列表存放到变量SOURCES里
aux_source_directory(. SOURCES)
# 指定生成目标
add_executable(${PROJECT_NAME} ${SOURCES})
# 设置生成目标后exe文件存放位置
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)

命令解释:

  • set:设置可执行文件的输出路径(EXCUTABLE_OUTPUT_PATH是全局变量)

    • EXECUTABLE_OUTPUT_PATH :目标二进制可执行文件的存放位置
  • include_directories:向工程添加多个特定的头文件搜索路径,路径之间用空格分隔;相当于指定g++编译器的-I参数

  • aux_source_directory:把当前目录下的源文件存列表存放到变量SOURCES里

  • ${CMAKE_SOURCE_DIR}:最外层CMakeLists.txt所在目录

  • ${PROJECT_NAME}:指定的项目名称

  • ${SOURCES}:调用之前生成的变量SOURCES

接着执行Cmake配置,生成build之后,进入build文件夹,执行cmake ..

image.png

接着在命令行输入mingw32-make.exe,编译文件链接文件,结果如下:

image.png

文件结构如下,生成了Demo.exe

image.png

总结

Cmake在Linux跟Windows上有一些细节上的问题,但是,因为是在vscode上编译,所以基本命令是不变,注意两个系统的一些细节就行。

如果有写的不对的地方,希望能留言指正,谢谢阅读。

参考:

B站up主:xiaobing1016,点进去是视频;老师教的很好,细节很多,感谢!

CMake 入门实战 | HaHack

cmake 从入门到入土_OceanStar的学习笔记的博客-CSDN博客

Linux下CMake简明教程_爱就是恒久忍耐的博客-CSDN博客_cmake 超级详细的教程,可以去看看!

posted @ 2022-09-13 16:44  ivarnd  阅读(105)  评论(0编辑  收藏  举报