使用cmake配置aws-cpp-sdk以及在cmake项目中使用

这篇具有很好参考价值的文章主要介绍了使用cmake配置aws-cpp-sdk以及在cmake项目中使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境

  • clion
  • msvc 15(2017)
  • cmake

配置cmake

这里不多赘述

编译aws-cpp-sdk

1.使用git bash下载aws-cpp-sdk项目到指定目录

注意命令里一定要加–recurse-submodules参数,否则编译的时候会提示项目找不到子项目

git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

2. 使用clion打开项目

3. 设置cmake编译选项

使用cmake配置aws-cpp-sdk以及在cmake项目中使用
先设置build directory为build,然后设置cmake options

-DBUILD_ONLY="s3;..."
-DCMAKE_INSTALL_PREFIX="D:\ProgramData\aws-sdk-cpp\build\install"
  • BUILD_ONLY:设置要编译的模块,多个模块之间用";"分隔
  • CMAKE_INSTALL_PREFIX:cmake的下载路径,完成安装之后使用find_package才能找到。

4. BUILD&&INSTALL 项目

对应 cmake --build && cmake --install

选择Build>Install完成项目的构建和安装,这个选项实际是将build和install合并成一步。
注意:一定要使用Install选项,才会在CMAKE_INSTALL_PREFIX指定的目录输出动态链接库,lib文件,include头文件等内容,才能在之后的cmake项目中使用find_package找到包。
使用cmake配置aws-cpp-sdk以及在cmake项目中使用

在cmake项目中使用aws-cpp-sdk

配置CMakeLists.txt


#设置AWSSDK_DIR,然后find_package
#$ENV{AWSSDK_HOME}表示取环境变量中的AWSSDK_HOME
#实际就是"<项目所在路径>\aws-sdk-cpp\build"目录,
#“build”对应之前的之前设置的build directory
set(AWSSDK_DIR $ENV{AWSSDK_HOME})
# aws-cpp-sdk的组件很多
# COMPONENTS后面可以指定想要使用的组件
find_package(AWSSDK REQUIRED COMPONENTS s3)

# 使用msvc需要添加下面两个编译选项
if (MSVC)
    add_definitions(-DUSE_IMPORT_EXPORT)
    add_definitions(-DUSE_WINDOWS_DLL_SEMANTICS)
endif ()

add_executable(test_program main.cpp)
target_link_libraries(test_program ${AWSSDK_LINK_LIBRARIES})

编译和项目构建中坑

fatal error C1083: Cannot open include file: ‘unistd.h’

【解决方案】

建议使用git clone下载项目,一定要添加–recurse-submodules选项

git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

find_package(AWSSDK REQUIRED)找不到

【错误描述】

CMake Error at CMakeLists.txt:12 (find_package):
  By not providing "FindAWSSDK.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "AWSSDK", but
  CMake did not find one.

  Could not find a package configuration file provided by "AWSSDK" with any
  of the following names:

    AWSSDKConfig.cmake
    awssdk-config.cmake

  Add the installation prefix of "AWSSDK" to CMAKE_PREFIX_PATH or set
  "AWSSDK_DIR" to a directory containing one of the above files.  If "AWSSDK"
  provides a separate development package or SDK, be sure it has been
  installed.

【解决方案】

确认一下

  • 有没有设置CMAKE_INSTALL_PREFIX
  • 有没有install项目(对应cmake --install,linux下应该是make&&make install??)
  • 项目的CMakeList.txt的AWSSDK_DIR有没有设置对,应该设置为cmake --build生成的目录。

error LNK2001: unresolved external symbol “char const * const Aws::Http::CONTENT_TYPE_HEADER”

【错误描述】

error LNK2001: unresolved external symbol "char const * const Aws::Http::CONTENT_TYPE_HEADER" (?CONTENT_TYPE_HEADER@Http@Aws@@3QBDB) Aws::Http::API_VERSION_HEADER" (?API_VERSION_HEADER@Http@Aws@@3QBDB)

【解决方法】

msvc下需要添加下面两个编译选项,官方文档下的Build Defines有提到。

if (MSVC)
    add_definitions(-DUSE_IMPORT_EXPORT)
    add_definitions(-DUSE_WINDOWS_DLL_SEMANTICS)
endif ()

使用中的坑

cJson冲突

aws-cpp-sdk-core中自带cJson文件,会和外部引入的cJson项目发生冲突。
解决方案可能就直接使用aws-cpp-sdk-core里面的cJson吧,如果有其他好办法可以在下面留言😂。

#include "aws/core/external/cjson/cJSON.h"

Support of UNICODE macro on Windows Visual Studio Projects

【错误描述】

github 上的一个issue,当然我自己也遇到了,简单来说就是S3Client里的方法名称和window下的wingdi.h文件冲突了。

【解决方案】

首先建议在.cpp文件中才使用冲突的方法,防止预处理命令污染其他文件
然后直接取消宏定义😂,可以自己加一点分支判定哈。文章来源地址https://www.toymoban.com/news/detail-433943.html

#undef GetObject
#undef GetMessage

到了这里,关于使用cmake配置aws-cpp-sdk以及在cmake项目中使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows下Qt使用AWS SDK for C++连接MinIO服务器

    MinIO——分布式对象存储服务器。 它是一个是一个高性能的对象存储服务器,用于构建云存储解决方案,出于工作需求用到了这个MinIO来管理文件。 但,我用的是Qt,c++语言,并且使用环境是windows,可MinIO的C++ SDK只能Linux使用,不支持Windows,如果非要自己编译Windows版本的话估

    2024年02月02日
    浏览(65)
  • cpp文件编译过程 makefile cmake

    直接 gcc 没有-o 的话出来的输出exe文件没有调试信息,相比-o的大小会小一点,只有包含了调试信息文件才可以执行 头文件在编译器的include目录中,编译时 -I 指定库 函数库默认路径在编译器的lib目录中,编译时 -L指定目录,-l 小写L 指定库 函数或者是在别的c与cpp文件中 静态

    2024年02月08日
    浏览(28)
  • 5、AWS SDK for Go-使用s3manager上传下载文件

    文档地址:传送门 上传和下载管理器可以分解大型对象,以便可以将它们分成多个部分并行传输。这使得恢复中断的传输变得容易。 S3 下载管理器确定文件是否可以拆分为更小的部分并并行下载。您可以自定义并行下载的数量和下载部分的大小。 S3 上传管理器确定文件是否

    2024年02月15日
    浏览(40)
  • 解决qt中cmake单独存放 .ui, .cpp, .h文件

    创建时间:2023-02-18 17:58:04 项目文件较多,全部放在一个目录下就像依托答辩。 希望能将头文件放入 include ,ui文件放入 ui ,源文件放入 src 。 为了将Qt代码和一般非Qt代码分离开,进一步地: 将Qt源文件放入 qt_src ,普通源文件放入 src 将Qt头文件放入 qt_include ,普通头文件放

    2024年02月02日
    浏览(35)
  • 使用vue-cli创建vue2项目以及项目配置

    1、安装vue-cli cmd:npm install -g @vue/cli@4.5.19 验证是否安装成功:vue -v   出现版本号说明安装成功 2、创建项目 vue create 项目名称 根据自己的需求选择特性,如下所示: 手动选择: 选择自己需要的特性:例如: 选择vue版本 选择路由模式 (输入y和n都可以,y代表history模式没有

    2024年02月06日
    浏览(39)
  • CMake构建静态库与动态库以及使用

    用例子的方式通俗易懂地解释CMake构建静态库与动态库的过程。 任务: 建立一个静态库和动态库,提供HelloFunc 函数供其他程序编程使用,HelloFunc向终端输出Hello World 字符串。 安装头文件与共享库。 编写一个程序去使用构建的共享库。 (1)建立 t3 目录,用于存放本节涉及到

    2024年02月07日
    浏览(27)
  • Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目

    @ 目录 Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 1. web.xml 的缺点分析 2. @WebServlet 注解 2.1 @WebServlet注解当中常用的一些属性的说明 3. 使用模板方法设计模式优化oa项目 4. 总结: 5. 最后: 分析 oa 项目中的 web.xml 文件 具体的可以移步至:

    2023年04月11日
    浏览(29)
  • windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

    一、CMake 和 mingw64的安装和环境配置  二、tasks.json和launch.json文件配置 tasks.json launch.json  三、CMakeLists.txt文件 四、头文件和源文件 cat.h cat.cpp main.cpp 五、中文乱码问题解决  CMake C/C++程序输出乱码 Clion CMake C/C++程序输出乱码_cmake message 乱码-CSDN博客https://blog.csdn.net/qq_37274323/

    2024年01月24日
    浏览(40)
  • Unity 使用 IL2CPP 发布项目

    Unity的IL2CPP(Intermediate Language to C++)是一个编译技术,它将C#代码转换为C++代码,然后再编译成平台相关的二进制代码。IL2CPP提供了几个优点,特别是在性能和跨平台部署方面。以下是IL2CPP的一些主要优点: 1.性能提升 :IL2CPP通常能提供比传统的Mono运行时更好的性能,因为它

    2024年04月28日
    浏览(29)
  • 【Java项目】使用Nacos实现动态线程池技术以及Nacos配置文件更新监听事件

    真诚的希望能给我项目一个stars!!! 项目源码 项目视频演示 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如Tomcat。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包