CMake中使用vcpkg

vcpkg是微软提供的C++包管理器,旨在简化开源库的获取和使用。通过vcpkg,开发者可以快速安装和集成如Qt等库,避免手动下载、构建和链接的繁琐步骤。在CMake项目中,设置CMAKE_TOOLCHAIN_FILE并调用find_package引入所需库,如qt5widgets。在指定vcpkg安装路径后,利用CMake和msbuild即可完成项目的构建和编译。
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

vcpkg安装开源库

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

CMakeLists中引入开源库

目录结构:在路径D:\Document\MyCode\vcpkgsample下|
|--main.cpp
|--CMakeLists.txt

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代码如下

#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	return a.exec();
}

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

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 解决方案,执行编译。

msbuild VcpkgSample.sln /p:platform="Win32"

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
[i].flightNo << "\t" << flightList[i].departure << "\t" << flightList[i].destination << "\t" << flightList[i].time << "\t" << flightList[i].price << "\t" << flightList[i].left在 CMake 使用 vcpkg 库,需要指定以下几个参数: 1. `CMAKE_TOOLCHAIN_FILE`:指SeatNum << endl; } } } //航班信息添加 void addFlightInfo() { if (currentUser.username !=定 vcpkg 提供的 cmake 工具链文件路径。 2. `CMAKE_PREFIX_PATH`:指定 vcpkg 安 "admin") { //非管理员无权添加航班信息 cout << "无权添加航班信息!" << endl装库的根目录。 下面是一个示例的 CMakeLists.txt 文件: ```cmake cmake_minimum_required(; return; } FlightInfo flight; cout << "请输入航班号:"; cin >> flight.flightNo; VERSION 3.0) # 设置项目名称 project(myproject) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD cout << "请输入出发地:"; cin >> flight.departure; cout << "请输入目的地:"; cin11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 指定 vcpkg 工具链文件路径 set(VCPKG_TOOLCHAIN >> flight.destination; cout << "请输入出发日期(格式:YYYY-MM-DD):"; cin >> flight.date; cout ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file << "请输入出发时间(格式:HH:MM):"; cin >> flight.time; cout << "请输入总座位") # 指定 vcpkg 库的根目录 set(VCPKG_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg 数:"; cin >> flight.seatNum; flight.leftSeatNum = flight.seatNum; cout << "请输入票价 CACHE STRING "Vcpkg root directory") # 在 cmake 引用 vcpkg 工具链文件 include(${VCPKG:"; cin >> flight.price; writeFlightInfoToFile(flight); cout << "添加成功!" << endl; } //_TOOLCHAIN}) # 设置要链接的库 find_package(Boost REQUIRED COMPONENTS system thread) # 添加可执行文件 add_executable航班信息修改 void modifyFlightInfo() { if (currentUser.username != "admin") { //非管理员无权修改(myapp main.cpp) # 链接库 target_link_libraries(myapp PRIVATE Boost::system Boost::thread) ``` 上述示航班信息 cout << "无权修改航班信息!" << endl; return; } string flightNo; 例,我们指定了 vcpkg 的工具链文件路径和库的根目录,并在 CMakeLists.txt 文件 cout << "请输入要修改的航班号:"; cin >> flightNo; vector<FlightInfo> flightList = read引用了 vcpkg 工具链文件,然后使用 `find_package` 命令来查找 Boost 库并链接到FlightInfoFromFile(); for (int i = 0; i < flightList.size(); i++) { if (flightList[i].可执行文件。 如果您的项目依赖多个库,您可以在 `find_package` 命令后添加多个库的名称。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值