使用cmake配置aws-cpp-sdk以及在cmake项目中使用
目录环境配置cmake编译aws-cpp-sdk1.使用git bash下载aws-cpp-sdk项目到指定目录2. 使用clion打开项目3. 设置cmake编译选项4. BUILD&&INSTALL 项目在cmake项目中使用aws-cpp-sdk配置CMakeLists.txt编译和项目构建中坑fatal error C1083: Cannot open include fi
环境
- 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
更多推荐
所有评论(0)