使用props文件为Visual Studio C++项目添加依赖

前言

我们在项目中经常要依赖第三方库,在VC++中,一般来说是在VS的项目属性当中配置附加头文件路径,附加库路径等等,这个方式也可以,但是有个麻烦的点在于,你每在解决方案里面新建一个项目,都要重新去项目属性中配置,我感觉是有点麻烦的,毕竟每次都要重新敲一遍字母,还容易敲错,下面介绍一种稍微简便的方式,也是我在工作中才学会的,觉得可能对大家有用,分享给大家。

步骤

在开始之前,我们要先有三方库文件,读者应该有才来看这篇文章,怎么获取我这里就不介绍了,这里打个广告,笔者写过一篇文章讲如何使用vcpkg获取三方库,链接如下vcpkg获取三方库
我先给大家演示这种方法有多简单,为了演示完整,下面这张图截得比较长。
在这里插入图片描述
第一步,点击项目的属性管理器界面(上图中被水印遮住了),如果你的VS中没有,那么需要在顶部的“视图”中打开即可;第二步,选择一个编译模式,Debug或者Release,右键添加现有属性表,此时会打开一个文件对话框,读者选择对应的属性表文件即可(下面会讲怎么制作属性表文件),每一个项目都可以像这么添加。

属性表文件

属性表文件本质上是一个xml配置文件,它和你手动配置项目属性的含义是一样的,你可以理解为它是项目属性的文件保存形式。它的方便在于,对于一个三方库,我们在为它写好配置文件后,接下来任何项目导入三方库就不用再去属性管理器中配置,而是直接导入配置文件。这里说的属性表文件是.props后缀的文件,这个文件是可以配置很多属性的,我这里只讲怎么用它配置三方库。并且,配置三方库的属性表文件是有模板的,读者每次配置三方库的时候只需要把模板复制出来稍微改一下就行,下面介绍怎么写属性表文件。

模板

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>$(SolutionDir)OpenSource\ffmpeg\inc;$(IncludePath)</IncludePath>
    <LibraryPath>$(SolutionDir)OpenSource\ffmpeg\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

这是模板,你只需要将$(SolutionDir)OpenSource\ffmpeg\inc$(SolutionDir)OpenSource\ffmpeg\lib改成你的对应路径即可,前者是头文件路径,后者是lib文件路径。这里给大家介绍一下笔者一般是怎么在项目目录下放置三方库的,也是工作后学到的一个不错的方式,如下图所示。
在这里插入图片描述
在解决方案目录里面,会新建一个OpenSource目录专门用来放置三方库,例如使用ffmpeg,就在该目录下新建一个ffmpeg目录,如下图所示
在这里插入图片描述
1.首先我会分Debug和Release,一般来说,建议尽量把三方库的debug和release版本都搞过来,因为项目调试的时候是在Debug下,发布是在Release下,是有区分的,当然有些三方库可能不好搞到两个版本的,那只有讲究用了。Debug和Release下方三方库的相关文件,如下图所示。
在这里插入图片描述
bin下放dll,include下放头文件,lib下放lib文件,pdb下放调试文件(这个根据自己需要,笔者这里是可能需要调试ffmpeg源代码才放的),并且你要把这里头文件路径和lib文件路径替换到上面的属性表模板里面。
2.然后src下放的是三方库的源代码文件,这个也是根据自己需要
3.剩下两个就是属性表文件了,以D结尾的是debug版本,另一个是release
上面的都配置好之后,添加三方库的依赖只需要导入.props文件,VS会自动解析文件帮你添加三方库依赖。
4.最后一步,上面都搞好之后,你还要主动链接三方库,因为我们上面的工作只是告诉了VS路径,像下面这样,好像有方法可以在属性表文件里面把这一步也省了,笔者没研究过,我一般喜欢直接在代码里面写,读者感兴趣可以自己研究。
在这里插入图片描述

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 C++ 中使用 OpenSSL 连接 RabbitMQ,可以使用 AMQP-CPP 库。AMQP-CPP 库是一个 C++ 实现的 AMQP 库,支持 SSL 连接。 以下是使用 AMQP-CPP 库连接 RabbitMQ 的示例代码: ```cpp #include <iostream> #include <amqp.h> #include <amqp_tcp_socket.h> #include <amqp_ssl_socket.h> #include <amqp_framing.h> #include <openssl/ssl.h> int main() { // 初始化 SSL 库 SSL_library_init(); // 创建 SSL 上下文 SSL_CTX *ssl_ctx = SSL_CTX_new(TLSv1_2_client_method()); // 加载证书和私钥 SSL_CTX_use_certificate_file(ssl_ctx, "client_cert.pem", SSL_FILETYPE_PEM); SSL_CTX_use_PrivateKey_file(ssl_ctx, "client_key.pem", SSL_FILETYPE_PEM); // 创建连接和 channel amqp_connection_state_t conn; conn = amqp_new_connection(); amqp_socket_t *socket = amqp_ssl_socket_new(conn); amqp_ssl_socket_set_ssl(socket, ssl_ctx); amqp_socket_set_hostname(socket, "localhost"); amqp_socket_set_port(socket, 5671); amqp_socket_set_tcp_nodelay(socket, true); amqp_socket_set_sockfd(socket, sockfd); amqp_set_socket(conn, socket); amqp_channel_open(conn, 1); // 发送消息 amqp_basic_properties_t props; props._flags = AMQP_BASIC_DELIVERY_MODE_FLAG; props.delivery_mode = 2; amqp_bytes_t exchange_bytes = amqp_cstring_bytes("exchange_name"); amqp_bytes_t routing_key_bytes = amqp_cstring_bytes("routing_key"); amqp_basic_publish(conn, 1, exchange_bytes, routing_key_bytes, 0, 0, &props, message_bytes); // 接收消息 amqp_basic_consume(conn, 1, queue_bytes, amqp_empty_bytes, 0, 1, 0, amqp_empty_table); amqp_frame_t frame; amqp_basic_deliver_t *delivery; amqp_basic_properties_t *properties; amqp_bytes_t body_bytes; while (true) { amqp_rpc_reply_t ret = amqp_consume_message(conn, &frame, NULL, 0); if (ret.reply_type == AMQP_RESPONSE_LIBRARY_EXCEPTION) { std::cerr << "consume message error: " << amqp_error_string2(ret.library_error) << std::endl; break; } if (frame.frame_type != AMQP_FRAME_METHOD) { continue; } if (frame.payload.method.id != AMQP_BASIC_DELIVER_METHOD) { continue; } delivery = (amqp_basic_deliver_t *) frame.payload.method.decoded; ret = amqp_basic_get_properties(conn, frame.channel, &frame.payload); if (ret.reply_type != AMQP_RESPONSE_NORMAL) { continue; } properties = (amqp_basic_properties_t *) frame.payload.properties.decoded; ret = amqp_basic_get_payload(conn, &frame.payload, &body_bytes); if (ret.reply_type != AMQP_RESPONSE_NORMAL) { continue; } std::string message((char *) body_bytes.bytes, body_bytes.len); std::cout << "received message: " << message << std::endl; amqp_destroy_envelope(&envelope); } // 关闭 channel 和连接 amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS); amqp_connection_close(conn, AMQP_REPLY_SUCCESS); amqp_destroy_connection(conn); // 释放 SSL 上下文 SSL_CTX_free(ssl_ctx); return 0; } ``` 需要注意的是,上述示例代码中的证书和私钥是通过文件加载的,如果需要从内存加载,可以使用 OpenSSL API 中的相应函数。同时,需要根据实际情况修改连接参数,例如 RabbitMQ 的地址、端口、用户名和密码等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值