| --- |
| 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 Client](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. |
| |