# Using PDAL with CMake

Author: | Bradley Chambers
Contact: | brad.chambers@gmail.com
Date: | 01/21/2015

This tutorial will explain how to use PDAL in your own projects using CMake. A more complete, working example can be found here.

Note

We assume you have either built or installed PDAL.

## Basic CMake configuration

Begin by creating a file named CMakeLists.txt that contains:

    cmake_minimum_required(VERSION 2.8)
    project(MY_PDAL_PROJECT)
    find_package(PDAL 1.0.0 REQUIRED CONFIG)
    include_directories(${PDAL_INCLUDE_DIRS})
    link_directories(${PDAL_LIBRARY_DIRS})
    add_definitions(${PDAL_DEFINITIONS})
    set(CMAKE_CXX_FLAGS "-std=c++11")
    add_executable(tutorial tutorial.cpp)
    target_link_libraries(tutorial PRIVATE ${PDAL_LIBRARIES})

## CMakeLists explained

    cmake_minimum_required(VERSION 2.8.12)

The cmake_minimum_required command specifies the minimum required version of CMake. We use some recent additions to CMake in PDAL that require version 2.8.12.

    project(MY_PDAL_PROJECT)

The CMake project command names your project and sets a number of useful CMake variables.

    find_package(PDAL 1.0.0 REQUIRED CONFIG)

We next ask CMake to locate the PDAL package, requiring version 1.0.0 or higher.

    include_directories(${PDAL_INCLUDE_DIRS})
    link_directories(${PDAL_LIBRARY_DIRS})
    add_definitions(${PDAL_DEFINITIONS})

If PDAL is found, the following variables will be set:

- PDAL_FOUND: set to 1 if PDAL is found, otherwise unset
- PDAL_INCLUDE_DIRS: set to the paths to PDAL installed headers and the dependency headers
- PDAL_LIBRARIES: set to the file names of the built and installed PDAL libraries
- PDAL_LIBRARY_DIRS: set to the paths where PDAL libraries and 3rd party dependencies reside
- PDAL_VERSION: the detected version of PDAL
- PDAL_DEFINITIONS: list the needed preprocessor definitions and compiler flags

    set(CMAKE_CXX_FLAGS "-std=c++11")

We haven’t quite implemented the setting of PDAL_DEFINITIONS within the PDALConfig.cmake file, so for now you should specify the c++11 compiler flag, as we use it extensively throughout PDAL.

    add_executable(tutorial tutorial.cpp)

We use the add_executable command to tell CMake to create an executable named tutorial from the source file tutorial.cpp.

    target_link_libraries(tutorial PRIVATE ${PDAL_LIBRARIES})

We assume that the tutorial executable makes calls to PDAL functions. To make the linker aware of the PDAL libraries, we use target_link_libraries to link tutorial against the PDAL_LIBRARIES.

## Compiling the project

Make a build directory, where compilation will occur:

    $ cd /PATH/TO/MY/PDAL/PROJECT
    $ mkdir build

Run cmake from within the build directory:

    $ cd build
    $ cmake ..

Now, build the project:

    $ make

The project is now built and ready to run:

    $ ./tutorial