环境

  • 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编译选项

在这里插入图片描述
先设置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

配置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文件中才使用冲突的方法,防止预处理命令污染其他文件
然后直接取消宏定义😂,可以自己加一点分支判定哈。

#undef GetObject
#undef GetMessage
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐