

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用適用於 C\$1\$1 的 AWS SDK 建立簡單的應用程式
<a name="build-cmake"></a>

 [CMake](https://cmake.org/) 是一種建置工具，可用來管理應用程式的相依性，以及建立適合您建置平台的 makefile。您可以使用 CMake 來建立和建置使用 的專案 適用於 C\$1\$1 的 AWS SDK。

此範例會報告您擁有的 Amazon S3 儲存貯體。此範例不需要在您的 AWS 帳戶中擁有 Amazon S3 儲存貯體，但如果您至少有一個儲存貯體，則會更有趣。如果您還沒有[儲存貯體，請參閱《Amazon Simple Storage Service 使用者指南》中的建立](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)儲存貯體。 **

## 步驟 1：撰寫程式碼
<a name="setting-up-a-cmake-project"></a>

此範例包含一個資料夾，其中包含一個來源檔案 (`hello_s3.cpp`) 和一個`CMakeLists.txt`檔案。程式使用 Amazon S3 報告儲存貯體資訊。此程式碼也可在 GitHub 上的[AWS 程式碼範例儲存庫](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/hello_s3)中使用。

您可以在`CMakeLists.txt`建置組態檔案中設定許多選項。如需詳細資訊，請參閱 [CMake 網站上的 CMake 教學](https://cmake.org/cmake-tutorial/)課程。 CMake 

**注意**  
Deep Dive：設定 `CMAKE_PREFIX_PATH`  
根據預設，macOS、Linux、Android 和其他非 Windows 平台上 適用於 C\$1\$1 的 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\$1\$1 的 AWS SDK ，可將開發套件的 DLLs 從安裝位置複製到您程式的可執行檔位置。如果這些 DLLs 不在可執行檔位置，則會發生「找不到檔案」的執行時間例外狀況。如果您遇到這些錯誤，請檢閱`CMakeLists.txt`檔案的此部分，了解唯一環境的必要變更。

**建立資料夾和來源檔案**

1. 建立`hello_s3`目錄和/或專案來保存您的來源檔案。
**注意**  
若要在 Visual Studio 中完成此範例：選擇**建立新專案**，然後選擇 **CMake 專案**。命名專案 `hello_s3`。此專案名稱用於 `CMakeLists.txt` 檔案。

1. 在該資料夾中，新增包含下列程式碼`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;
   }
   ```

1. 新增`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 建置
<a name="building-with-cmake"></a>

CMake 會使用 中的資訊`CMakeLists.txt`來建置可執行程式。

建議您依照 IDE 的標準實務建置應用程式。

**從命令列建置應用程式**

1. 建立 目錄，其中 **`cmake`**將建置您的應用程式。

   ```
   mkdir my_project_build
   ```

1. 變更為建置目錄，並使用專案來源目錄的**`cmake`**路徑執行 。

   ```
   cd my_project_build
   cmake ../
   ```

1. 在 **`cmake`**產生建置目錄後，您可以使用 **`make`**（或在 Windows **`nmake`**上） 或 MSBUILD (`msbuild ALL_BUILD.vcxproj` 或 `cmake --build . --config=Debug`) 來建置應用程式。

## 步驟 3：執行
<a name="run-app"></a>

當您執行此應用程式時，它會顯示主控台輸出，其中列出 Amazon S3 儲存貯體的總數和每個儲存貯體的名稱。

我們建議您遵循 IDE 的標準實務來執行應用程式。

**注意**  
請記得登入！如果您使用 IAM Identity Center 進行身分驗證，請記得使用 AWS CLI `aws sso login`命令登入。

**透過命令列執行程式**

1. 變更為產生建置結果的偵錯目錄。

1. 使用可執行檔的名稱執行程式。

   ```
   hello_s3
   ```

如需使用 的其他範例 適用於 C\$1\$1 的 AWS SDK，請參閱 [AWS 服務 使用適用於 C\$1\$1 的 AWS SDK 呼叫 的引導範例](programming-services.md)。