C/C++ 大型工程工具链搭建
一、配置环境要求
C/C++ 编译器
此项有系统区别,如果是 Windows 平台,那么可以下载 VS2022 社区版,它自带 MSVC 编译器。如果嫌它太笨重,也可以直接下载 MSVC 再发行组件。如果是 Linux 平台可以直接通过系统自带的包管理器下载 GCC 编译器,版本原则上没有要求。
-
CMake 是跨平台的构建工具,记得配置好环境变量。
-
开源并且跨平台的编辑器,如果你自己喜欢别的,也可以。
VScode 的插件列表如下:
- C/C++
- CMake
- CMake Tools
- Gitlens
- Test Explorer UI
- C++ TestMate
-
由微软主导的 C/C++ 包管理器,也可以一用别的,看自己。记得配置环境变量。
二、开始搭建
其实搭建工程模板主要是 CMake 的事情,即主要是给出能用的 CMakeLists.txt ,这边为了省事儿,直接给出两个 CMakeLists.txt 。不过在此之前需要给出工程目录结构,如下图。

build 目录是由 CMake 自动产生的,我们不用管,主要讲一下其他几个目录的。include 里面放头文件,src 目录下面放源文件,tests 目录下面放单元测试。可以看到,整个工程只有两个 CMakeLists.txt ,一个存在于顶级目录,一个存在于 tests 目录下。现在我们给出两个 CMakeLists.txt 的配置。
# 顶层目录的 CMakelists.txt
cmake_minimum_required(VERSION 3.10)
# 下面这句配置 vcpkg 与 cmake 的联动,位置必须在 project() 之前,路径可以改成与自己相符的
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
project(exampleProject)
# 设置构建结果的输出路径
#set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_CXX_STANDARD 11)
# 包含之前所说的 include 目录,里面都是头文件
include_directories(include)
# 将 src 目录下的所有源文件加入后面的变量之中
aux_source_directory(src DIR_LIB_SRCS)
# 构建生成 .lib 文件
add_library(${PROJECT_NAME} ${DIR_LIB_SRCS})
# 添加子目录 tests
add_subdirectory(tests)
# tests 子目录下的 CMakelists.txt
cmake_minimum_required(VERSION 3.10)
# 下面这句配置 vcpkg 与 cmake 的联动,位置必须在 project() 之前,路径可以改成与自己相符的
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
# 子目录下需要构建另一个工程
project(exampleProject_test)
set(CMAKE_CXX_STANDARD 11)
# 包含父工程当中的头文件,链接器需要使用
include_directories(include)
# 以及 tests 目录下的源文件,这些文件用于编写单元测试
aux_source_directory(./ TEST_SRC_FILE)
# 寻找 googletest 单元测试框架,利用 vcpkg 下载
find_package(GTest REQUIRED)
# 构建生成单元测试可执行文件
add_executable(${PROJECT_NAME} ${TEST_SRC_FILE})
# 将父工程中生成的 .lib 文件以及 googletest 的库文件链接到此 exe
target_link_libraries(${PROJECT_NAME} PRIVATE TinySTL GTest::gtest GTest::gtest_main)
上面讲了 CMakeLists.txt 的配置,下载需要利用 vcpkg 下载 googletest 单元测试框架,不然原本的 CMakeLists.txt 会报错找不到包。
当 vcpkg 正确安装之后,我们在命令行打入 vcpkg --version 时可以看到以下内容。

现在利用它来下载 googletest ,打入 vcpkg install gtest:x64-windows 后面的平台可以自己改,如果是 Linux 平台,那么就是 vcpkg install gtest:x64-linux 。如果下载完成了,命令行会出现以下文字。

之后我们的 CMake 就不会报错找不到包了。
如果 vscode 安装了插件 C/C++ TestMate 之后还可以直接从侧边栏中看到单元测试列表,而且可以细粒度执行,比较好用,完整的编写环境截图看起来是下面这个样子。

运行调试什么的都是 OK 的,大家可以快乐的写代码了。
C/C++ 大型工程工具链搭建的更多相关文章
- Ubuntu16.04下的2009q3交叉编译工具链的搭建
环境搭建: 1.下载arm-2009q3.tar.bz2源码. 百度云链接 密码: rbui 2.将arm-2009q3.tar.bz2拷贝到/usr/local/arm(没有该目录就 ...
- X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)
故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...
- 以太坊-windows-私有链-搭建(非源码)
初 接触以太坊,只安装,不讲道理: 1.win10系统,64位 2.以太坊钱包 3.以太坊geth客户端 geth 和 钱包可以到ethfans.org的资料库里下载,那里提供国内镜像和官网地址. 钱 ...
- 交叉编译工具链介绍《Building Embedded Linux Systems》
1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...
- centos 以太坊多节点私链搭建
环境 centos 7 搭建 3 个节点的 私链. 第一步 安装 一些依赖的 工具 yum update -y && yum install git wget bzip2 vim ...
- 从大厂DevOps工具链部署,看现代产品的生命周期管理
目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...
- 研发过程及工具支撑 DevOps 工具链集成
https://mp.weixin.qq.com/s/NYm63nkCymIV3DbL4O01dg 腾讯重新定义敏捷 |Q推荐 小智 InfoQ 2020-09-03 敏捷开发奠基人 Robert C ...
- [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考
一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...
- HC32L110(三) HC32L110的GCC工具链和VSCode开发环境
目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...
随机推荐
- vue v-model原理实现
v-model的实现原理: 基础用法: v-model 本质上不过是语法糖,可以用 v-model 指令在表单 <input>.<textarea> 及 <select& ...
- pageX的兼容性处理1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JAVA! static的作用
是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只 ...
- 分配IP地址的好东西 DHCP以及NAT简单介绍
主机配置协议DHCP 1.DHCP应用场景 2.DHCP基础原理 3.NAT简单介绍 4.配置命令 1.手工配置IP地址,工作量比较大而且不好管理,如果用户自己修改参数,可能会导致ip地址冲突,这个时 ...
- Pandas中Series与Dataframe的区别
1. Series Series通俗来讲就是一维数组,索引(index)为每个元素的下标,值(value)为下标对应的值 例如: arr = ['Tom', 'Nancy', 'Jack', 'Ton ...
- 北京太速科技-第六代Intel i7四核八线程6U VPX主控板
一.产品概述 该产品是一款基于第六代Intel i7四核八线程的高性能6U VPX刀片式计算机.产品提供了可支持全网状交换的高速数据通道,其中P1,P2各支持4个PCIe x4 Gen3总线接口,P3 ...
- HashMap(1.7)源码学习
一. 1.7 和1.8区别 数据结构: 1.7: 数组 + 链表 1.8 : 数组 + 链表 + 红黑树 put: 1.7: 头插法 1.8: 尾插法 hash计算: 1.7 : Objects.ha ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
- 扫盲贴:2021 CSS 最冷门特性都是些啥?
最近几年 CSS 界的大事之一是每年年底的 <State Of CSS>,也就是 CSS 现状调查,去年年底发布了<State Of CSS 2021>.其中关于特性这一章,会 ...
- 搭建Pritunl+Google认证远程连接
搭建Pritunl+Google认证远程连接VPN 基于Centos7安装 Pritunl是一款免费开源的 VPN 平台软件(但使用的不是标准的开源许可证,用户受到很多限制).这是一种简单有效的V ...