384-CMake构建集成编译环境

CMake简介

使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。

CMake安装

ubuntu上直接执行 sudo apt install cmake 安装完
可以通过cmake -version查看其版本:
在这里插入图片描述

CMake在Ubuntu的VScode安装插件

安装
在这里插入图片描述

CMake使用介绍

cmake命令会执行目录下的CMakeLists.txt配置文件里面的配置项,一个基本的CMakeLists.txt的配置文件内容如下:
在这里插入图片描述

示例

在这里插入图片描述
如果需要编译的有多个源文件,可以都添加到add_executable(main main.cpp test.cpp)列表当中,但是如果源文件太多,一个个添加到add_executable的源文件列表中,就太麻烦了,此时可以用aux_source_directory(dir var)来定义源文件列表,使用如下:
在这里插入图片描述
aux_source_directory()也存在弊端,它会把指定目录下的所有源文件都加进来,可能会加入一些我们不需要的文件,此时我们可以使用set命令去新建变量来存放需要的源文件,如下

在这里插入图片描述
一个正式的工程构建
应该有以下目录
在这里插入图片描述
在这里插入图片描述

静态库和动态库的编译控制

在这里插入图片描述
最外层的CMakeLists.txt是总控制编译,内容如下:
在这里插入图片描述
src里面的源代码要生成静态库或动态库,CMakeLists.txt内容如下:
在这里插入图片描述
test里面的CMakeLists.txt内容如下:
在这里插入图片描述

CMake常用的预定义变量

在这里插入图片描述

CMake构建集成编译环境(1)

我们把上一篇博客写的muduo_server.cpp用cmake构建编译环境

我们在编译出可执行文件需要执行下面这个命令行

在这里插入图片描述
涉及到 可执行文件,编译参数(-g)(优化级别-O)(这些是编译选项),源文件,头文件的搜索路径,库文件的搜索路径,要链接的库

CMake命令就是从项目的根目录开始找CMakeLists.txt文件。
我们首先在testmuduo下创建CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(main)

# 配置编译选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)

# 配置头文件搜索路径
# include_directories()
# 配置库文件搜索路径
# link_directories()

# 设置需要编译的源文件列表
set(SRC_LIST ./muduo_server.cpp)

# 设置可执行文件最终存储的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 把.指定路径下的所有源文件名字放入变量名SRC_LIST里面
# aux_source_directory(. SRC_LIST)

# 表示生成可执行文件server,由SRC_LIST变量所定义的源文件编译而来
add_executable(server ${SRC_LIST})

# 表示server这个目标程序,需要连接muduo_net muduo_base pthread这三个库文件
target_link_libraries(server muduo_net muduo_base pthread)

保存。我们打开终端,进入到testmuduo文件夹下,执行cmake .
根据我们配置的东西进行编译。
在这里插入图片描述
然后执行make,make就会去找Makefile
在这里插入图片描述

CMake构建集成编译环境(2)

我们在示例1中,生成了那么多编译文件。怎么办?
我们在项目中应该这么做:
在项目下创建一个bin目录:生成的可执行文件
lib目录:生成的库文件
include:生成的头文件
src:源文件
build:编译过程中产生的临时的中间文件
test:测试文件
example:示例
thirdparty:依赖的第三方库
然后再放一个:CMakeLists.txt
然后我们可以再放一个:autobuild.sh一键编译

我们把上一节生成的编译文件删除掉
我们在testmuduo下创建一个build文件夹

在这里插入图片描述
在这里插入图片描述
我们希望把编译的中间文件都放到build里面
我们新增这一行:

# 设置可执行文件最终存储的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

我们进入到build里面。
执行

cmake ..

在这里插入图片描述
然后我们再执行make
在这里插入图片描述
可执行文件在bin里面
在这里插入图片描述
在这里插入图片描述

CMake构建集成编译环境(3)

因为我要完成集群聊天服务器这个项目,我要将CMakeLists.txt调整一下
我在chatserver下再创建一个CMakeLists.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值