CMake中使用vcpkg

vcpkg是一个微软开源的C++包管理器。

在以前的开发中,如果在项目中需要使用某个开源库,例如qt,我们需要取官网下载qt的源码,然后构建得到对应的库,然后在项目中链接这个库。对于自己熟悉的库还好说,若是不熟悉的库,如何拉取源码?如何构建?如何在项目中引用?等等这些问题通常会困扰我们,然而,大多数情况下,我们只是使用这个开源库,并不需要关心这个库的构建和编译等问题。如此,在以前的开发过程中,往往会花费不少的时间在引入开源库上。

vcpkg是在背景下开发出来的,通过vcpkg,我们可以在项目中很方便的引入开源库,不用再关心拉取代码、构建开源库的这些事情。

CMake构建的项目中引入开源库

如果我们的项目是用cmake作为构建系统,那么如何引入开源库呢?

  • 使用vcpkg安装我们需要的开源库
  • 在CMakeLists中引入需要的开源库

vcpkg安装开源库

例如需要使用QtWidgets,打开powershell,输入vcpkg install qt5-base

CMakeLists中引入开源库目录结构:在路径D:\Document\MyCode\vcpkgsample下|

css 复制代码
|--main.cpp
|--CMakeLists.txt
scss 复制代码
cmake_minimum_required(VERSION 2.8.12)
#设置CMAKE_TOOLCHAIN_FILE 将vcpkg.cmake的路径赋值给CMAKE_TOOLCHAIN_FILE变量。必须在project函数
#之前设置
SET(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}\vcpkg\scripts\buildsystems\vcpkg.cmake")
project(VcpkgSample)
set(EXECUTABLE_NAME VcpkgSample)
#添加qt5widgets库的目录
find_package(qt5widgets QUIET CONFIG REQUIRED)
add_executable(${EXECUTABLE_NAME} main.cpp)
#链接qt5widgets库
target_link_libraries(${EXECUTABLE_NAME}${Qt5Widgets_LIBRARIES})

main.cpp代码如下

arduino 复制代码
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    return a.exec();
}

打开x86 Command Prompt 命令行,依次输入

bash 复制代码
cd /D D:\Document\MyCode\vcpkgsample
mkdir build
cd build
cmake -G"Visual Studio 15 2017" .. -DVCPKG_ROOT="E:\code"

其中 VCPKG_ROOT选项是指定vcpkg安装的目录,本机安装在E:\code目录下。

就在build目录下,生成了vs2017 解决方案,执行编译。

ini 复制代码
msbuild VcpkgSample.sln /p:platform="Win32"
相关推荐
AI科技星2 分钟前
物理世界的几何建构:论统一场论的本体论革命与概念生成
人工智能·opencv·线性代数·算法·矩阵
codeejun3 分钟前
每日一Go-25、Go语言进阶:深入并发模式1
开发语言·后端·golang
杜子不疼.4 分钟前
SpringBoot + Vue 前后端分离项目实战:权限 + 工作流 + 报表
vue.js·spring boot·后端
让我上个超影吧5 分钟前
【力扣34】在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
数据知道9 分钟前
MongoDB 数值更新原子操作:`$inc` 实现点赞、计数器等高并发原子操作
数据库·算法·mongodb
逆境不可逃15 分钟前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
昊坤说不出的梦15 分钟前
梳理 Spring Boot Web 开发的几个概念
前端·spring boot·后端
筱昕~呀16 分钟前
冲刺蓝桥杯-DFS板块(第二天)
算法·蓝桥杯·深度优先
逍遥德17 分钟前
Maven教程.03-如何阅读pom.xml文件
xml·java·后端·maven
问好眼18 分钟前
《算法竞赛进阶指南》0x01 位运算-1.a^b
c++·算法·位运算·信息学奥赛