C++包管理工具vcpkg的使用
前言
最近在使用c++时,发现编译第三方库真的烦,同时还要在vs的设置中引入包含目录、库目录,操作起来十分繁琐。之后github上找到了vcpkg这个微软开发的包管理工具,用起来挺顺手的,就是下载包的时候,由于包服务器在外网,很多时候会安装失败,这是一个苦恼的问题。最近,在一片博客看到有大佬搭建国内个人镜像,没有梯子的,可以去了解一下。
安装
安装很简单,可以参考github提供的README.md。
- 首先第一步从vcpkg仓库把代码clone下来:
1
2> git clone git@github.com:microsoft/vcpkg.git
> cd vcpkg - 然后第二步,使用命令编译vcpkg
1
2> .\bootstrap-vcpkg.bat //windows下
> ./bootstrap-vcpkg.sh //Linux下 - 第三步,为了方便操作,可以将目录下生成的vcpkg可执行文件,加入到系统的环境变量
- 第四步,为全局配置vcpkg在这一步之后,在windows下,VS中,可以直接在头部引入安装的库使用,不需要其他包含库目录等操作,十分方便。
1
> vcpkg integrate install
对于不使用vs的情况,vcpkg可以在cmake中使用,通过编译参数-DCMAKE_TOOLCHAIN_FILE = [vcpkg root]\scripts\buildsystems\vcpkg.cmake,进行配置,实例如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19cmake_minimum_required (VERSION 3.8)
project(ManagerServer)
set(CMAKE_CXX_STANDARD 14)
#G:/c++ Depende/vcpkg, 是我的vcpkg的根目录,在使用的时候需要更换为自己的
set(VCPKG_ROOT "G:/C++ Depende/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE PATH "")
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})
#这个是查找sqlite3库的操作, 安装sqlite3的操作,请看文章的下一部分
find_package(sqlite3 CONFIG REQUIRED)
aux_source_directory(. sourceList)
# 将源代码添加到此项目的可执行文件。
add_executable (ManagerServer ${sourceList})
#进行sqlite3库的链接
target_link_libraries(ManagerServer PRIVATE sqlite3)
使用
接下来是关于vcpkg的使用,本文以官方文档描述的安装和使用sqlite3的例子来介绍。
通过search参数来查找提供的第三方包
1
2
3
4
5
6
7> vcpkg search sqlite3
dlib[sqlite3] sqlite3 support for dlib
soci[sqlite3] Build sqlite3 backend
sqlite3 3.32.0-0 SQLite is a software library that implements a self-contained, serverless, zer...
sqlite3[tool] sqlite3 executable
sqlitecpp 3.0.0 SQLiteC++ (SQLiteCpp) is a smart and easy to use C++ SQLite3 wrapper.
sqlpp11-connector... 0.29-2 A C++ wrapper for sqlite3 meant to be used in combination with sqlpp11.通过install命令来安装包
在安装包之前,需要查看本机的VS环境是否安装的English的语言包,否则,会出现警告和报错的问题。接下来,是使用install安装第三方包,示例的环境是windows10。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27> vcpkg install sqlite3
Computing installation plan...
The following packages will be built and installed:
sqlite3[core]:x86-windows
Starting package 1/1: sqlite3:x86-windows
Building package sqlite3[core]:x86-windows...
-- Using cached G:/C++ Depende/vcpkg/downloads/sqlite-amalgamation-3320000.zip
-- Using source at G:/C++ Depende/vcpkg/buildtrees/sqlite3/src/3320000-f17e2f22e8
-- Configuring x86-windows
-- Building x86-windows-dbg
-- Building x86-windows-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x86-windows... done
Installing package sqlite3[core]:x86-windows...
Installing package sqlite3[core]:x86-windows... done
Elapsed time for package sqlite3:x86-windows: 11.25 s
Total elapsed time: 11.25 s
The package sqlite3:x86-windows provides CMake targets:
find_package(sqlite3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE sqlite3)
//在windows下命令默认编译的是x86的包,可以通过":"指定,比如:
> vcpkg install sqlite3:x64-windows在完成安装后,可以看出命令行输出了,在camke中的使用语句,将其写入CMakeLists.txt就可以了,特别要注意target_link_libraries(main PRIVATE sqlite3)add_executable()后面。
利用list参数,查看已经编译安装的包
1
2
3> vcpkg list
sqlite3:x64-windows 3.32.0-0 SQLite is a software library that implements a s...
sqlite3:x86-windows 3.32.0-0 SQLite is a software library that implements a s...利用remove参数,卸载已经编译安装的包
1
> vcpkg remove [package_name]
使用实例
- main.cpp文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31// main.cpp
int main() {
sqlite3 *pdb = nullptr;
int result;
result = sqlite3_open("test.db", &pdb);
if (result != SQLITE_OK) {
perror("sqlite_open error!");
return -1;
}
sqlite3_stmt *pStmt;
const char *sql =
"create table Student("
"t_id, integer primary key, "
"t_name varchar(15), t_age integer)";
char *errMsg = NULL;
result = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg);
if (result != SQLITE_OK) {
printf("create table student failed!\n");
printf("error conde %d \t error message:%s\n", result, errMsg);
}
printf("create table success!\n");
return 0;
} - CMakeLists.txt文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#CMakeLists.txt
cmake_minimum_required (VERSION 3.8)
project(ManagerServer)
set(CMAKE_CXX_STANDARD 14)
set(VCPKG_ROOT "G:/C++ Depende/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE PATH "")
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})
find_package(sqlite3 CONFIG REQUIRED)
aux_source_directory(. sourceList)
# 将源代码添加到此项目的可执行文件。
add_executable (ManagerServer ${sourceList})
target_link_libraries(ManagerServer PRIVATE sqlite3)
参考文章
- 本文标题:C++包管理工具vcpkg的使用
- 本文作者:lookupman
- 创建时间:2020-06-08 18:39:40
- 本文链接:https://lookupman.cn/2020/06/08/C++包管理工具vcpkg的使用/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!