AWS-SDK-CPP:如何在一个项目中使用 aws-sdk-cpp 的多个配置?

问题描述 投票:0回答:1

我需要在具有四种配置“Debug、RelWithDebInfo、MinSizeRel 和 Release”的项目中使用 AWS SDK

如果我按照说明从源代码构建和安装 SDK,似乎一次只能安装一种配置。 文档说:

通过运行 cmake 生成构建文件。在 cmake 命令行上指定是否构建调试版本或发布版本。在整个过程中选择“调试”以运行应用程序代码的调试配置。在整个过程中选择“发布”以运行应用程序代码的发布配置。

在我需要运行应用程序代码的调试和发布配置的情况下,预期用途是什么?我的项目目前正在开发中,我经常在调试和发布配置之间切换。这似乎是一个常见的用例,但我在设置此设置时遇到了一些困难。

如果我只是使用 sdk 的发布配置,那么当我尝试在调试中构建我的项目时,我会得到:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in AWSTest3.hello-world.obj

如果我使用调试 SDK,当我尝试在发布版本中构建我的项目时,我会得到相反的结果。这一切都是有道理的,也是我在这种情况下所期望的。

我尝试在单独的目录中安装发布版本和调试版本,但在我的项目的 cmakelists.txt 中链接它们是一个挑战。

当我放入cmakelists.txt时:

find_package(AWSSDK)
find_package(AWSSDKdebug)

Cmake 找到第一个并跳过第二个。事实证明,这是因为当它在建议的文件夹中找到包时,它所做的下一步就是在该文件夹中运行 AWSSDKconfig.cmake。该文件所做的第一件事是:

if(AWSSDK_FOUND)
    return()
endif()

当第二个包到达该行时,该行将立即退出。 因此很明显,他们不希望您有两个独立的 SDK 安装并独立链接到每个 SDK。

如果我在第二个库中注释掉该条件,它将找到这两个包。下一步是将它们链接起来。

AWS 建议链接到:

target_link_libraries(${PROJECT_NAME} PUBLIC ${AWSSDK_LINK_LIBRARIES})

${AWSSDK_LINK_LIBRARIES} 是在 AWSSDKconfig.cmake 中设置的变量。尽管每当我尝试打印它时它看起来都是空的。看来我需要链接类似的东西:

find_package(AWSSDK)
target_link_libraries(${PROJECT_NAME} PUBLIC optimized ${AWSSDK_LINK_LIBRARIES})
find_package(AWSSDKdebug)
target_link_libraries(${PROJECT_NAME} PUBLIC debug ${AWSSDK_LINK_LIBRARIES})

当我使用上面的代码时,我得到:

CMake Error at source/projects/AWSTest3.hello-world/CMakeLists.txt:59 (target_link_libraries):
  The "optimized" argument must be followed by a library. 

如果我保留“优化”或“调试”,那么所有链接都很好。但这些说明符的功能正是我所需要的。

我尝试以不同的方式破解 AWSSDKconfig.cmake 以强制其工作,但我朝这个方向走得越远,就越清楚,这不是正确的方法。

如有任何意见,我们将不胜感激。谢谢!

c++ amazon-web-services aws-sdk aws-sdk-cpp
1个回答
0
投票

您应该能够通过在单独的目录中构建和安装来完成此操作。您可以在构建 sdk 时使用以下 cmake 参数来完成此操作:

-DCMAKE_INSTALL_PREFIX="<path-to-install>"

然后在构建应用程序时使用以下内容:

-DCMAKE_PREFIX_PATH="<path-of-install-folder>"

总体来说可能看起来像这样

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

# debug install
mkdir build-debug
cd build-debug
cmake ../aws-sdk-cpp -DBUILD_ONLY="s3;s3-crt" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="<path-to-debug-install>/debug-install"
cmake --build . --config=Debug
cmake --install . --config=Debug
cd ..

# release install
mkdir build-release
cd build-release
cmake ../aws-sdk-cpp -DBUILD_ONLY="s3;s3-crt" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="<path-to-release-install>/release-install"
cmake --build . --config=Release
cmake --install . --config=Release
cd ..

# building your application in release
cd <your build dir>
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="/<path-to-release-install>/release-install"
cmake --build . --config Release
© www.soinside.com 2019 - 2024. All rights reserved.