VSCODE+CMAKE 搭建C++环境

大王前沿:初来Linux世界,相比以前生活在Windows的集成编译环境下的鼠标点点,这里的确更难存活下去。
不过没关系,以后工作可必须要在Linux下自己写编译规则来调试运行了。

一 >介绍今天的主角CMAKE

cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。

二 >搭建步骤
1 安装
#1
sudo apt-get install cmake
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gdb

#2 
在应用商店下载vscode
并下载以下扩展
	C/C++
	CMAKE
	CMAKETOOLS
2 >使用

1> 打开vscode,新建一个空文件夹或者打开已经创建好的空文件夹
2> 键入快捷键CTRL+SHIFT+P可以看到vscode跳出对话框 “>” ,将入Cmake 可以看到Cmake :Quick Start,点击
3>Cmake会询问你项目命名(此处命名为tutor)
4>Cmake会询问你是要add_excutable or add_libraries
5>接下来VSCODE会自动检测到当前工作目录没有CMakeLists.txt文件,会询问你是否自动生成,点击YES即可,工作空间里会出现.vscode文件夹 | main.cpp | CMakeLists.txt | Build 文件夹

其中
.vscode下面保存的是你工作区(workspace)的相关配置,比如任务配置、debug配置。
Build文件夹中是编译(Compile),还有预编译、链接过程中生成的文件,一般我们采用 cmake 的 out-of-source 方式来构建(即生成的中间产物和源代码分离),这样做可以让生成的文件和源文件不会弄混,且目录结构看起来也会清晰明了。所以推荐使用这种方式,至于这个文件夹的命名并无限制,我们习惯命名为 build。

6>.打开CMakeLists.txt

#指定 cmake 的最小版本
cmake_minimum_required(VERSION 3.0.0)
#设置项目名称
project(tutor VERSION 0.1.0)

include(CTest)
enable_testing()

#设置编译类型 如果第四步选择Library 那么此处会是add_library(tutor main.cpp) # 生成静态库
add_executable(tutor main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

点击vscode最下面一排的播放符号 即可Launch tutor.exe
重点的语句讲解见注释,这是一个单文件,单文件夹的项目,其CMakeLists.txt也非常简单
那么多文件夹多文件的情况又该如何呢?

三 >多文件多文件夹的情况

假设我们有如下的文件结构,工作空间里不仅有main.cpp 还有一个test1.cpp及其头文件test1.h
通常为了工程更加清晰,我们会将不同功能模块放到一个单独的文件夹里,dirtest就是一个这样的文件夹,里面也必须自定义一个CMakeLists.txt 以及.cpp和.h文件
在这里插入图片描述
此时工作空间下的CMakeLists.txt 和 子文件夹下的CMakeLists.txt 的设计思路应该是这样的:
先将子目录中所有的源文件先编译成一个库,最好还要能给其命名,以便下面调用
再将工程目录下所有的源文件编译成一个可执行文件,然后只需要将这个文件和前面这个库链接起来就可以达到目的。
下面就来实现这个过程

1 >dirtest文件夹下的CMakeLists.txt

# 搜索当前目录下的所有.cpp文件 把他们这个整体命名为DIRTEST_SRC
aux_source_directory(. DIRTEST_SRC)
# 指定编译包含的源文件为TEST2
add_library(TEST2 ${DIRTEST_SRC})

2 >工作空间下的CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)

project(project VERSION 0.1.0)

include(CTest)
enable_testing()

# 添加dirtest子目录
add_subdirectory(dirtest)
# 搜索当前目录下的所有.cpp文件 把他们这个整体命名为ROOTDIR_SRC
aux_source_directory(. ROOTDIR_SRC)
# 指定生成目标
add_executable(project ${ROOTDIR_SRC})

#添加链接的库 
#目标:project
#目标库文件需要链接的库:TEST2为dirtest文件夹下的库文件
target_link_libraries(project TEST2)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

四 >动态库和静态库

默认生存静态库 STATIC可缺省,显式SHARED可生成动态库

add_library(common STATIC util.cpp) # 生成静态库
add_library(common SHARED util.cpp) # 生成动态库或共享库

静态库在程序编译时会被连接到目标代码中,程序运行时不再需要静态库;而动态库在程序编译时,不会放到连接的目标代码中,而是在程序运行时被载入,因此在程序运行时还需要动态库的存在。

结语

cmake还有其他很多强大的功能,有了上述功能对于平时写代码的编译和运行应该没有问题。
如果还想学习cmake调试,测试等功能,可以去看cmake tutor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值