# CMake External Project

You can add the AWS SDK as an external project and use the same [`CMake parameters`](./Docs/CMake_Parameters.md) from a CMake file instead.

### Generic format

```
cmake_minimum_required(VERSION 3.x)
project(<project-name> NONE)
include(ExternalProject)

ExternalProject_Add(<project-name>
    GIT_REPOSITORY    https://github.com/aws/aws-sdk-cpp.git
    GIT_TAG           <tag>
    CMAKE_ARGS        <CMake-options>
    BUILD_ALWAYS      TRUE
    TEST_COMMAND      ""
)
```

where, `<tag>` could be `origin/master` or one of the [`versions`](https://github.com/aws/aws-sdk-cpp/releases).

Note that the required minimmum CMake version is `3.x`.

### External project SAMPLE

```
cmake_minimum_required(VERSION 3.10.2)
project(libawscpp-download NONE)
include(ExternalProject)

ExternalProject_Add(libawscpp-download
    GIT_REPOSITORY    https://github.com/aws/aws-sdk-cpp.git
    GIT_TAG           1.8.17
    LIST_SEPARATOR    "|"
    CMAKE_ARGS       -DBUILD_SHARED_LIBS=OFF
                     -DBUILD_ONLY=monitoring|logs
    BUILD_ALWAYS      TRUE
    TEST_COMMAND      ""
)
```

If the `GIT_TAG` points to a version >= `1.7.0`, third party dependencies `aws-c-common`, `aws-checksums` and `aws-c-event-stream` are built by default and installed in default system directory. To customize how they are handled you can also install them [`separately`](../ReadMe.md#Third-party-dependencies), if you do so, make sure to include `-DBUILD_DEPS=OFF` in `CMAKE_ARGS`.

The SDK's CMake file expects a semilcolon separated list of components for `BUILD_ONLY` CMake argument, however, since `ExternalProject_Add` processes list arguments differently, you'll need to use `LIST_SEPARATOR` to indicate how the elements of the list are split, or which character will replace the semicolon. (For more information, refer to this [`issue`](https://github.com/aws/aws-sdk-cpp/issues/826))