本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 C++ 的 AWS SDK 建立簡單的應用程式
CMake
此範例會報告您擁有的 Amazon S3 儲存貯體。此範例不需要在您的 AWS 帳戶中擁有 Amazon S3 儲存貯體,但如果您至少有一個儲存貯體,則會更有趣。如果您還沒有儲存貯體,請參閱《Amazon Simple Storage Service 使用者指南》中的建立儲存貯體。
步驟 1:撰寫程式碼
此範例包含一個資料夾,其中包含一個來源檔案 (hello_s3.cpp
) 和一個CMakeLists.txt
檔案。程式使用 Amazon S3 報告儲存貯體資訊。此程式碼也可在 GitHub 上的AWS 程式碼範例儲存庫
您可以在CMakeLists.txt
建置組態檔案中設定許多選項。如需詳細資訊,請參閱 CMake 網站上的 CMake 教學
注意
Deep Dive:設定 CMAKE_PREFIX_PATH
根據預設,macOS、Linux、Android 和其他非 Windows 平台上 適用於 C++ 的 AWS SDK 的 會安裝到 /usr/local
,Windows 也會安裝到 \Program Files (x86)\aws-cpp-sdk-all
。
當您將 AWS 開發套件安裝到這些標準位置時,CMake 會自動尋找必要的資源。不過,如果您將 AWS 軟體開發套件安裝到自訂位置,您必須告知 CMake 在何處可以找到建置軟體開發套件所產生的下列資源:
-
AWSSDKConfig.cmake
:組態檔案,告知 CMake 如何在專案中尋找和使用 AWS SDK 程式庫。如果沒有此檔案,CMake 就找不到 AWS SDK 標頭檔案、連結至 AWS SDK 程式庫,或設定適當的編譯器旗標。 -
(適用於 1.8 版和更早版本) 相依性的位置:
aws-c-event-stream
、aws-c-common
、aws-checksums
若要設定自訂安裝路徑:
cmake -DCMAKE_PREFIX_PATH=/path/to/your/aws-sdk-installation /path/to/project/you/are/building
如果您未CMAKE_PREFIX_PATH
設定自訂安裝,當 CMake 嘗試在 find_package(AWSSDK)
中處理 時,您的建置將會失敗,並出現「找不到 AWSSDK」等錯誤CMakeLists.txt
。
注意
Deep Dive:Windows Runtime 程式庫
若要執行您的程式,您程式的可執行檔位置需要數個 DLLs:aws-c-common.dll
、aws-c-event-stream.dll
aws-checksums.dll
aws-cpp-sdk-core.dll
、、 以及任何根據您程式元件的特定 DLLs (此範例也需要 ,aws-cpp-sdk-s3
因為它使用 Amazon S3)。CMakeLists.txt
檔案中的第二個if
陳述式會將這些程式庫從安裝位置複製到可執行檔位置,以滿足此需求。 AWSSDK_CPY_DYN_LIBS
是由 定義的巨集 適用於 C++ 的 AWS SDK ,可將開發套件的 DLLs 從安裝位置複製到程式的可執行檔位置。如果這些 DLLs 不在可執行位置,則會發生「找不到檔案」的執行時間例外狀況。如果您遇到這些錯誤,請檢閱CMakeLists.txt
檔案的此部分,了解唯一環境的必要變更。
建立資料夾和來源檔案
-
建立
hello_s3
目錄和/或專案以保留您的來源檔案。注意
若要在 Visual Studio 中完成此範例:選擇建立新專案,然後選擇 CMake 專案。命名專案
hello_s3
。此專案名稱用於CMakeLists.txt
檔案。 -
在該資料夾中,新增包含下列程式碼
hello_s3.cpp
的檔案,該程式碼會報告您擁有的 Amazon S3 儲存貯體。#include <aws/core/Aws.h> #include <aws/s3/S3Client.h> #include <iostream> #include <aws/core/auth/AWSCredentialsProviderChain.h> using namespace Aws; using namespace Aws::Auth; /* * A "Hello S3" starter application which initializes an Amazon Simple Storage Service (Amazon S3) client * and lists the Amazon S3 buckets in the selected region. * * main function * * Usage: 'hello_s3' * */ int main(int argc, char **argv) { Aws::SDKOptions options; // Optionally change the log level for debugging. // options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug; Aws::InitAPI(options); // Should only be called once. int result = 0; { Aws::Client::ClientConfiguration clientConfig; // Optional: Set to the AWS Region (overrides config file). // clientConfig.region = "us-east-1"; // You don't normally have to test that you are authenticated. But the S3 service permits anonymous requests, thus the s3Client will return "success" and 0 buckets even if you are unauthenticated, which can be confusing to a new user. auto provider = Aws::MakeShared<DefaultAWSCredentialsProviderChain>("alloc-tag"); auto creds = provider->GetAWSCredentials(); if (creds.IsEmpty()) { std::cerr << "Failed authentication" << std::endl; } Aws::S3::S3Client s3Client(clientConfig); auto outcome = s3Client.ListBuckets(); if (!outcome.IsSuccess()) { std::cerr << "Failed with error: " << outcome.GetError() << std::endl; result = 1; } else { std::cout << "Found " << outcome.GetResult().GetBuckets().size() << " buckets\n"; for (auto &bucket: outcome.GetResult().GetBuckets()) { std::cout << bucket.GetName() << std::endl; } } } Aws::ShutdownAPI(options); // Should only be called once. return result; }
-
新增指定專案名稱、可執行檔、來源檔案和連結程式庫
CMakeLists.txt
的檔案。# Set the minimum required version of CMake for this project. cmake_minimum_required(VERSION 3.13) # Set the AWS service components used by this project. set(SERVICE_COMPONENTS s3) # Set this project's name. project("hello_s3") # Set the C++ standard to use to build this target. # At least C++ 11 is required for the AWS SDK for C++. set(CMAKE_CXX_STANDARD 11) # Use the MSVC variable to determine if this is a Windows build. set(WINDOWS_BUILD ${MSVC}) if (WINDOWS_BUILD) # Set the location where CMake can find the installed libraries for the AWS SDK. string(REPLACE ";" "/aws-cpp-sdk-all;" SYSTEM_MODULE_PATH "${CMAKE_SYSTEM_PREFIX_PATH}/aws-cpp-sdk-all") list(APPEND CMAKE_PREFIX_PATH ${SYSTEM_MODULE_PATH}) endif () # Find the AWS SDK for C++ package. find_package(AWSSDK REQUIRED COMPONENTS ${SERVICE_COMPONENTS}) if (WINDOWS_BUILD AND AWSSDK_INSTALL_AS_SHARED_LIBS) # Copy relevant AWS SDK for C++ libraries into the current binary directory for running and debugging. # set(BIN_SUB_DIR "/Debug") # if you are building from the command line you may need to uncomment this # and set the proper subdirectory to the executables' location. AWSSDK_CPY_DYN_LIBS(SERVICE_COMPONENTS "" ${CMAKE_CURRENT_BINARY_DIR}${BIN_SUB_DIR}) endif () add_executable(${PROJECT_NAME} hello_s3.cpp) target_link_libraries(${PROJECT_NAME} ${AWSSDK_LINK_LIBRARIES})
步驟 2:使用 CMake 建置
CMake 會使用 中的資訊CMakeLists.txt
來建置可執行程式。
建議您依照 IDE 的標準實務建置應用程式。
從命令列建置應用程式
-
建立 目錄,其中
cmake
將建置您的應用程式。mkdir my_project_build
-
變更為建置目錄,並使用專案來源目錄的
cmake
路徑執行 。cd my_project_build cmake ../
-
在
cmake
產生建置目錄後,您可以使用make
(或在 Windowsnmake
上) 或 MSBUILD (msbuild ALL_BUILD.vcxproj
或cmake --build . --config=
) 來建置應用程式。Debug
步驟 3:執行
當您執行此應用程式時,它會顯示主控台輸出,其中列出 Amazon S3 儲存貯體的總數和每個儲存貯體的名稱。
我們建議您依照 IDE 的標準實務執行應用程式。
注意
請記得登入!如果您使用 IAM Identity Center 進行身分驗證,請記得使用 AWS CLI aws sso login
命令登入。
透過命令列執行程式
-
變更為產生建置結果的偵錯目錄。
-
使用可執行檔的名稱執行程式。
hello_s3
如需使用 的其他範例 適用於 C++ 的 AWS SDK,請參閱 AWS 服務 使用適用於 C++ 的 AWS SDK 呼叫 的引導範例。