blob: ddaa413e5a06fefa15c64d2e647ac1f06ef62129 [file] [log] [blame]
---
title: C++ Application Development Walkthrough
---
This section describes how to set up a native client development environment using C++ and CMake.
## <a id="prerequisites_cpp"></a>Prerequisites
This walkthrough assumes that certain components are in place:
- The **<%=vars.product_name%> Native Client libraries**. Install the Native Client as described in
[Getting Started with the Native Library](getting-started-nc-client.html). Follow the ease-of-use
recommendations by installing the Native Client in a well-known location and renaming it.
| System | Native Client Library Well-Known Location |
|-----|-----|
| Linux | /usr/local/nativeclient |
| Windows | C:\Program Files\nativeclient |
- The **CMake** tool suite. Download and install CMake, following the instructions on [cmake.org] (https://cmake.org).
- **Geode**: Install and configure Geode. See the [_Geode User's Guide_](http://geode.apache.org/docs/) for instructions and system requirements.
To develop a Native Client application using C++ and CMake:
- Create a project directory structure
- Populate the project directories with C++ source code
- Configure the CMake build environment
- Run CMake to build your application
- Run your application
## <a id="setting_up_dirs_cpp"></a>Setting up Directories and Sources
1. Create a project directory structure. In this example, the project is called MyProject. The
directory structure provides a place for your application source files and a `cmake` modules
directory for project-specific CMake files:
```
MyProject/
cmake/
Find<%=vars.product_name%>Native.cmake
CMakeLists.txt
main.cpp
```
1. Change directory to MyProject and create your application sources. In this example, we have one
source file, `main.cpp`.
## <a id="configuring_cmake_cpp"></a>Configuring CMake
1. Copy the `Find<%=vars.product_name%>Native.cmake` script from one of the Native Client examples to the `cmake` subdirectory.
1. Create CMakeLists.txt. Copy the file from an example, if you like, as a starting point. The CMakeLists.txt file
should contain the following CMake instructions:
- CMake minimum version
```
cmake_minimum_required(VERSION 3.10)
```
- Your project name and language
```
project(MyProject LANGUAGES CXX)
```
- Minimum language version. For the Native Client, the minimum C++ version is 11.
```
set(CMAKE_CXX_STANDARD 11)
```
- Path to the CMake modules directory where the `Find<%=vars.product_name%>Native.cmake` script is located and an instruction
telling CMake to use it:
```
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(<%=vars.product_name%>Native REQUIRED COMPONENTS cpp)
```
- The compilation target and the source(s) to be compiled
```
add_executable(MyProject main.cpp)
target_link_libraries(MyProject
PUBLIC
<%=vars.product_name%>Native::cpp)
```
Combined, the above elements comprise the following CMakeLists.txt:
```
# CMakeLists.txt for C++ Native Client App
cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(<%=vars.product_name%>Native REQUIRED COMPONENTS cpp)
add_executable(MyProject main.cpp)
target_link_libraries(MyProject
PUBLIC
<%=vars.product_name%>Native::cpp)
```
## <a id="building_the_app_cpp"></a>Building the App
1. Create a build directory and set it as your current directory:
```
$ mkdir build
$ cd build
```
1. Run CMake twice, once to configure the build, then again to perform the build, generating the executable application.
```
$ cmake ..
$ cmake --build .
```
This creates the executable application in your build directory.