clion结合vcpkg以及GTest的使用
一、vcpkg简介、下载和使用
1. vcpkg是什么
vcpkg对于我们用户来说相当于一个c++的包管理器,其他语言中类似的包管理器有:
- Java:Maven
- JavaScript:npm,yarn
- python:pip
其实当我以前使用python或者Java时就深刻地感受到了包管理器的便利,而当时也没怎么听说c++有比较好用的包管理器,而我也只是一年前才听说过有vcpkg
这个东西,但由于之前不太熟悉cmake如何编写而作罢,而这学期的《计算机图形学》课程需要按照OpenGL相关的库,此时我第一次需要使用到vcpkg,也感受到了它的便利,故也编写博客记录一下。
2. vcpkg下载
GitHub链接:https://github.com/microsoft/vcpkg
clone url:https://github.com/microsoft/vcpkg.git
我们需要先将项目下载下来:
git clone https://github.com/microsoft/vcpkg.git
然后执行:
.\bootstrap-vcpkg.bat
这个指令应该是到GitHub上去下载vcpkg对应的可执行文件
待它执行完之后,在项目中就会出现vcpkg.exe
的可执行文件了
这样vcpkg即下载完成
3. 使用vcpkg下载第三方库
当前vcpkg中有许多第三方库,例如:boost、GTest、jsoncpp等等,我们可以使用以下的指令下载需要的库:
vcpkg install 库名
例如:
当第三方库下载好了,它就会提示当使用cmake进行构建项目时需要添加的脚本代码。
二、clion结合vcpkg
虽然vcpkg
是针对于Visual Studio
编译器的包管理器,但是感觉对比于clion
,vs
有很多地方用得非常不顺手(特别是对于使用过IntelliJ IDEA
的同学),而且clion
也可以选择使用vs
作为编译环境,因此我这里使用clion来使用vcpkg中的第三方库。
1. 方法一:使用环境变量
先设置两个环境变量:
VCPKG_ROOT:vcpkg文件夹目录
VCPKG_DEFAULT_TRIPLET:x64-windows
然后在项目根目录下的CmakeLists.txt中添加(位于c++标准声明和project声明之间):
# c++11
set(CMAKE_CXX_STANDARD 11)
...
# vcpkg <--
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "")
endif()
if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
endif()
# project
project(main)
...
2. 方法二:添加cmake指令【推荐】
先使用clion打开(或创建一个新的)cmake项目,点击下方的【cmake】tab:
然后将需要的命令填写到下图的文本框中:
需要填写的命令为:
-DCMAKE_TOOLCHAIN_FILE=<自己的vcpkg目录>/scripts/buildsystems/vcpkg.cmake
例如:
然后需要注意将编译器切换为Visual Studio
(两种方法都需要切换),因为vcpkg实际上是针对Visual Studio
的c++包管理器,因此许多第三方库只有使用vs
编译环境才能成功运行(经测试GTest和Boost.test使用mingw编译运行失败)
三、clion通过vcpkg使用GTest
1. GTest简介
GTest的全称是Google Test,是谷歌开发的一套针对c++的单元测试库。
之前开发Java时就已经接触过Junit了,当时就觉得单元测试真是太方便了,对于我这样的初级开发者而言,单元测试只是多几个程序执行入口而已,但确实非常便于编写小端的代码笔记和测试较小的模块
2. GTest配置
首先先使用vcpkg install gtest
将gtest
库下载下来
然后会发现命令行中出现这样的提示:
The package gtest:x64-windows provides CMake targets:
find_package(GTest CONFIG REQUIRED)
target_link_libraries(main PRIVATE GTest::gmock GTest::gtest GTest::gmock_main GTest::gtest_main)
后面的两行命令我们直接粘贴到CMakeLists.txt中的末尾即可:
add_executable(main ...)
...
find_package(GTest CONFIG REQUIRED)
target_link_libraries(main PRIVATE GTest::gtest GTest::gtest_main)
注意这里的target_link_libraries
中我去掉了gmock
相关的配置,因为他们两个同时链接会发生冲突,而且一般我们使用两者其一即可。
3. GTest的简单使用
在main.cpp
中编写:
#include <iostream>
#include <gtest/gtest.h>
using namespace std;
TEST(TestCase, t1) {
cout << "hello world" << endl;
}
然后会发现clion
中有和IDEA
一样人性化的运行按钮:
然后我们即可运行测试代码块了:
运行效果:
当然,GTest中还有许多非常强大的功能,但我现在还用不到,当前我只需要个测试入口log一些测试信息就好了haha。
tips:和这里介绍的GTest库的使用一样,其他的第三方库按照这个流程配置好即可成功运行,例如boost、jsoncpp等等,个人觉得vcpkg唯一不足的地方就是绑定了vs编译环境,很多库无法使用mingw环境编译运行。
clion结合vcpkg以及GTest的使用的更多相关文章
- 使用clion+cmake+vcpkg的开发现代的c++跨平台程序
使用clion+cmake+vcpkg的开发现代的c++跨平台程序 使用c++开发跨平台的程序 背景 在开发过程中,使用c++作为开发语言,通常被认为是痛苦的,啰嗦的,超长开发时间的.最近几年有各种各 ...
- 使用gtest(googletest)进行c++单元测试
这是系列文章的第三篇,前两篇https://www.cnblogs.com/gaopang/p/11243367.html和https://www.cnblogs.com/gaopang/p/1158 ...
- CLion之C++框架篇-优化框架,单元测试(二)
背景 结合上一篇CLion之C++框架篇-安装工具,基础框架的搭建(一),继续进行框架优化! googletest(GTest)是Google开源的C++测试框架,与CLion组合,对C++环 ...
- 使用c++开发跨平台的程序
使用c++开发跨平台的程序 背景 在开发过程中,使用c++作为开发语言,通常被认为是痛苦的,啰嗦的,超长开发时间的.最近几年有各种各样的语言被广泛使用,相对比来说c++不是那么出彩.c++虽然年龄大, ...
- C/C++ 大型工程工具链搭建
一.配置环境要求 C/C++ 编译器 此项有系统区别,如果是 Windows 平台,那么可以下载 VS2022 社区版,它自带 MSVC 编译器.如果嫌它太笨重,也可以直接下载 MSVC 再发行组件. ...
- 在Clion里链接gtest
本来以为像之前链接boost一样,加个链接路径就好了,没想到报找不到gtest的符号,搞了半天,没弄明白啥原因. 网上也没搜到好方法,只能把gtest的源码加到项目里,然后在链接了. CMake配置如 ...
- 使用CLion编辑C工程
最近正在研究Linux C代码编辑器,确实也不太喜欢SI(Windows看代码还行,编辑一般,同步麻烦), 尝试使用CLion,但对makefile工程支持不好,怎么编译还没搞懂, 阅读.编辑还不错, ...
- CLion之C++框架篇-优化开源框架,引入curl,实现get方式获取资源(四)
背景 结合上一篇CLion之C++框架篇-优化框架,引入boost(三),继续进行框架优化!在项目中,我们经常会通过get方式拉取第三方资源,这一版优化引入类库curl,用来拉取第三方资源库. ...
- 图解安装CLion编写程序并进行单元测试
我对JetBrains公司的IDE情有独钟,于是这里使用的IDE是CLion,CLion是以IntelliJ为基础,专为开发C及C++所设计的跨平台IDE,可以在Windows.Linux及MacOS ...
随机推荐
- 3个月零基础入门Python+数据分析,详细时间表+计划表分享
大家好,我是白云. 今天想给大家分享的是三个月零基础入门数据分析学习计划.有小伙伴可能会说,英语好像有点不太好,要怎么办?所以今天我给大家分享的资源呢就是对国内的小伙伴很友好,还附赠大家一份三个月学 ...
- Linux各目录及每个目录的详细介绍总结
Linux各目录及每个目录的详细介绍 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所 ...
- C++STL—string类
string容器 1.1 string容器的基本概念 string容器是一个类 这个容器中有一个指针,指针维护了一个数组 string容器提供copy.find.insert.replace等等功能 ...
- 使用脚本下载Gmail邮件附件
以下脚本连接上我的Gmail帐号,将收件箱中2013年1月份的新语丝邮件的附件保存在当前目录的xys文件夹中. import imaplib import email import os dir_na ...
- awk-03-操作符
操作符 在awk中,有3种情况表达式为假: 1.数字是0 2.空字符串 3.未定义的值 数值运算,未定义变量初始值为0 字符运算,未定义变量初始值为空 示例 1.截取整数( + - ) 2.感叹号 读 ...
- JVM-超全图
- Docker小白到实战之容器数据卷,整理的明明白白
前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...
- vim宏录制
宏录制 当你要重复某一个操作时,录制的宏可以很快地帮你完成任务. 准备文本 <!DOCTYPE html> <html lang="en"> <hea ...
- git push&pull命令详解
git pull的作用是从一个仓库或者本地的分支拉取并且整合代码. git pull [<options>] [<repository> [<refspec>-] ...
- nginx 实现反向代理、负载均衡、高可用
转自:https://blog.csdn.net/zy1471162851/article/details/91795712 tip: nginx是一款高性能的http 服务器/反向代理服务器及电 ...