Windows下写一个C++项目,提供API接口供页面使用
一、准备工作
C++如果要提供网络接口供页面使用,需要使用cpprest库,所以需要提前下载安装cpprest库。进而引出vcpkg包管理工具的下载安装。在cmake编译过程中,还需要用到zlib,所以还需要提前下载zlib。东西比较多,坑也比较多,一步一步来。
本次编译环境:
Windows11
Visual Studio 2017
cmake 3.25.1
CLion 2022.3.2
1.Windows下安装vcpkg包管理工具
在Windows下使用 vcpkg 工具安装 C++ 库,您可以按照以下步骤进行操作:
-
下载 vcpkg 工具:在浏览器中访问 vcpkg 的 GitHub 存储库 https://github.com/microsoft/vcpkg。
-
在 GitHub 存储库页面中,点击 “Code” 按钮,然后选择 “Download ZIP” 选项。
-
下载 ZIP 存档文件后,将其解压缩到您选择的目录中。
-
打开cmd或 PowerShell 并导航到 vcpkg 目录。
-
在命令提示符中执行以下命令,用于初始化 vcpkg 工具:
.\bootstrap-vcpkg.bat
执行完成后,目录如下:
-
初始化完成后,可以使用以下命令来安装所需的 C++ 库。
-
安装完成后,您可以在您的项目中使用 vcpkg 安装的库。在项目的编译设置中,将包含正确的库路径和头文件路径,以便编译器能够找到并链接这些库。
请注意,vcpkg 工具可以用于安装许多其他的 C++ 库,不仅限于 C++ REST SDK。您可以使用相同的方法来安装其他需要的库。在使用 vcpkg 安装库之前,请确保您已经安装了适当的构建工具(如Visual Studio)和配置了相关的编译环境。
vcpkg常用指令:
vcpkg install 安装指定软件包/库 vcpkg remove 卸载一个已安装的库 vcpkg update 显示需要更新的库的列表 vcpkg list 列出当前vcpkg上已安装的库 vcpkg version 显示vcpkg的版本信息 vcpkg integrate install 使已安装的软件包在整个用户中可用,第一次使用时需要管理员权限 vcpkg integrate remove 删除用户范围内的集成 vcpkg 目录文件及文件夹说明:
buildtrees - 包含从中生成每个库的源的子文件夹,一般在xxxx.clean文件夹下。
docs - 文档和示例。
downloads - 所有已下载的工具或源的缓存副本。 运行安装命令时,vcpkg 会首先搜索此处。
installed - 包含每个已安装库的标头和二进制文件。 与 Visual Studio 集成时,实质上是相当于告知它将此文件夹添加到其搜索路径。
packages - 在不同的安装之间用于暂存的内部文件夹。
ports - 用于描述每个库的目录、版本和下载位置的文件。 如有需要,可添加自己的端口。
scripts - 由 vcpkg 使用的脚本(CMake、PowerShell)。
toolsrc - vcpkg 和相关组件的 C++ 源代码。
triplets - 包含每个受支持目标平台(如 x86-windows 或 x64-uwp)的设置
2.vcpkg下载cpprest
在vcpkg目录下,打开cmd或 PowerShell。执行以下命令进行安装:
vcpkg install cpprestsdk
安装完成后,可以查看vcpkg安装列表:
vcpkg list
下面是cpprest的实际路径。
3.下载zlib
在vcpkg目录下,打开cmd或 PowerShell。执行以下命令进行安装:
vcpkg install zlib
安装完成后,可以查看vcpkg安装列表:
vcpkg list
我这里就有个问题,我在vcpkg\vcpkg-master\installed\x64-windows\include路径下找不到zlib。。。,而且我想用vcpkg remove zlib
删除zlib,再重新安装,可是remove不起作用。。。
没办法,只能自己手动安装。具体步骤如下:
1.进入zlib开源官网 https://www.zlib.net/
2.找到入口
3.点击下载
4.将压缩包解压缩到 E:\work\hgs\c++\vcpkg\vcpkg-master\installed 路径下
二、项目初始化
1.创建目录,新建两个文件:main.cpp
和CMakeLists.txt
。功能简单点,就是提供一个两数相加的接口,获取接口输入的两个数,返回两数的和。
main.cpp:
#include <iostream>
#include <string>
#include <cpprest/http_listener.h>
#include <cpprest/json.h>
using namespace web;
using namespace web::http;
using namespace web::http::experimental::listener;
using namespace std;
void handleCalculate(const http_request& request)
{
auto json = request.extract_json().get();
int num1 = json[U("num1")].as_integer();
int num2 = json[U("num2")].as_integer();
cout << "num1="<<to_string(num1) << endl;
cout << "num2="<<to_string(num2) << endl;
int sum = num1 + num2;
json::value response;
response[U("sum")] = json::value::number(sum);
request.reply(status_codes::OK, response);
}
int main()
{
cout << "main start" << endl;
http_listener listener(L"http://localhost:5000/api/calculate");
listener.support(methods::POST, handleCalculate);
listener.open().wait();
std::cout << "Listening on http://localhost:5000/api/calculate" << std::endl;
std::cout << "Press ENTER to exit." << std::endl;
std::cin.ignore();
listener.close().wait();
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(phonebooks)
set(CMAKE_CXX_STANDARD 11)
#这里要写本机的vcpkg路径
include(E:/work/hgs/c++/vcpkg/vcpkg-master/scripts/buildsystems/vcpkg.cmake)
#这将告诉 CMake 在构建项目时查找并使用 C++ REST SDK。
find_package(cpprestsdk REQUIRED)
# 添加可执行文件
add_executable(phonebooks main.cpp)
# 链接 cpprestsdk 库
target_link_libraries(phonebooks PRIVATE cpprestsdk::cpprest)
2.在本目录下打开cmd或 PowerShell,执行以下命令来生成项目
cmake .
编译成功!
三、项目调试
我使用的CLion 2022.3.2编译器,直接打开项目。
在clion里点击运行,使用postman发送请求:
接口返回正确结果,完美收工!!
参考引用:
https://blog.csdn.net/fangqingivu/article/details/116937021
.3.2编译器,直接打开项目。
[外链图片转存中…(img-QtRiojuS-1688721615162)]
在clion里点击运行,使用postman发送请求:
[外链图片转存中…(img-WZwUN6CO-1688721615162)]
接口返回正确结果,完美收工!!
参考引用:
https://blog.csdn.net/fangqingivu/article/details/116937021