# Building a Project Using the SDK

## Overview

The provided example applications can serve as a guide for creating a new project using the BMC C++ SDK. The examples are located in the `examples` directory, and the instructions to build and execute them are similar to those related with [building the C++ SDK Library](/getting-started/c++-sdk/building-the-c++-sdk-library.md).

### Step by Step Guide

Here is a step-by-step guide on how to build a project that uses the library:

1. Navigate to the directory containing the project that uses the BMC C++ SDK.
2. Ensure that the development environment is properly set up. To do this, follow the instructions in the [Environment Setup](/getting-started/c++-sdk/environment-setup.md) section of our guide.
3. Create a `CMakeLists.txt` file in the root directory of the project. An example of this file can be found [below](#cmake-example-for-building-applications).
4. Create a `build` directory inside the project.
5. Navigate to the `build` directory.
6. Configure CMake:
   * Linux/macOS

     <pre class="language-cmake" data-overflow="wrap"><code class="lang-cmake">cmake -DLIBRARY_PATH=[Path to the dir containing the library] -DINCLUDE_PATH=[Path to the dir containing the include files] ..
     </code></pre>
   * Windows 64

     <pre class="language-cmake" data-overflow="wrap"><code class="lang-cmake">cmake -DLIBRARY_PATH=[Path to the dir containing the library] -DINCLUDE_PATH=[Path to the dir containing the include files] .. -G "Visual Studio 17 2022" -A x64
     </code></pre>
   * Windows 32

     <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">cmake -DLIBRARY_PATH=[Path to the dir containing the library] -DINCLUDE_PATH=[Path to the dir containing the include files] .. -G "Visual Studio 17 2022" -A win32
     </code></pre>
7. Build with CMake:

   <pre class="language-bash" data-overflow="wrap"><code class="lang-bash">cmake --build . --config Release
   </code></pre>
8. On Windows, verify that within the `build` directory, there is a `Release` (or `Debug` ) directory containing the project's executable. On Linux/macOS, look for the executable in the `build` directory.

### CMake Example for Building Applications

Below is an example of a `CMakeLists.txt` file for building a sample application (`i3c_cccs`) that uses the BMC C++ SDK as a dynamic library:

```cmake
cmake_minimum_required(VERSION 3.5)
project(MyProject)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Accept library path as an argument
set(LIBRARY_PATH "" CACHE PATH "Path to the static library")

# Accept include path as an argument
set(INCLUDE_PATH "" CACHE PATH "Path to the include directory")

if(NOT LIBRARY_PATH)
  message(FATAL_ERROR "LIBRARY_PATH is empty")
endif()

if(NOT INCLUDE_PATH)
  message(FATAL_ERROR "INCLUDE_PATH is empty")
endif()

include(FetchContent)

FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.2/json.tar.xz)
FetchContent_MakeAvailable(json)

# ---
# Target Definition, Properties and Commands
# ---

add_executable(my_project
  main.cpp
)

set_target_properties(my_project PROPERTIES OUTPUT_NAME my_app)

# Include needed headers
target_include_directories(my_project PRIVATE 
  ${INCLUDE_PATH}
)

# Link against needed libraries
if(WIN32)
  target_link_libraries(my_project 
    nlohmann_json::nlohmann_json
    ${LIBRARY_PATH}/bmc_sdk.lib
  )
  # To link against the static library on Windows, use the following line instead:
  # target_link_libraries(my_project ${LIBRARY_PATH}/bmc_sdk_static.lib)
elseif(APPLE)
  target_link_libraries(my_project 
    nlohmann_json::nlohmann_json
    ${LIBRARY_PATH}/libbmc_sdk.dylib
  )
  # To link against the static library on macOS, use the following line instead:
  # target_link_libraries(my_project ${LIBRARY_PATH}/libbmc_sdk_static.a)
else()
  target_link_libraries(my_project 
    nlohmann_json::nlohmann_json
    ${LIBRARY_PATH}/libbmc_sdk.so
  )
  # To link against the static library on Linux, use the following line instead:
  # target_link_libraries(my_project ${LIBRARY_PATH}/libbmc_sdk_static.a)
endif()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.binho.io/getting-started/c++-sdk/building-a-project-using-the-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
