wiki:BuildingOnUnixWithCMake

Status Notice

The CMake build system is supported for GEOS versions 3.5 and after.

The CMake configuration for GEOS was introduced shortly after the GEOS 3.2.0 release (ticket #317). GEOS version prior to 3.5 used GNU Automake as the only supported build system.

Building on Unix with CMake

This article describes how to use the CMake build system to build and install GEOS on Unix-like systems (Linux, Mac OS X, Solaris, *BSD, etc.) using GCC or any other supported compiler.

There are two ways of running CMake:

  • cmake - CLI program accepting options or running in interactive mode
  • ccmake - program with curses-based GUI

Requirements

  • CMake 3.1 or later
  • Decent C++ compiler and C++ Standard Library, GNU GCC 4.x or later recommended
  • GEOS source code.

Configure

It is recommended to build GEOS outside of the source code tree. To do this, use a build directory beside the source directory geos (from now on referred to as BUILDDIR):

$ git clone https://git.osgeo.org/gitea/geos/geos.git
$ mkdir build
$ ls
build geos
$ cd build
$ cmake ../geos
$ make help

There is collection of CMake variables available to control aspects of compilation and installation. They are specified on the cmake cmdline as -DVAR=VALUE.

NOTE: Running cmake with no variables does NOT clear current variable settings. They must be set explicitly on the cmdline or interactively using ccmake .. To revert to defaults the build directory can be cleared using rm -rf *

Useful CMake variables

  • CMAKE_INSTALL_PREFIX - by default is set to /usr/local directory
  • CMAKE_BUILD_TYPE - Values are Release or Debug (which is useful for debugging)

CMake variables specific to GEOS

  • GEOS_ENABLE_TESTS - Set to OFF|ON (default) to control build of GEOS tests package
  • GEOS_ENABLE_INLINE - Set to OFF|ON (default) to control GEOS compilation with small functions inlining
  • GEOS_ENABLE_ASSERT - Set to ON|OFF (default) to build GEOS with assert() macro enabled (not available for Visual C++ compiler)
  • GEOS_ENABLE_MACOSX_FRAMEWORK - Set to ON|OFF (default) to build a Mac OS X framework
  • GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT - Set to ON|OFF (default) to add compatibility with *nix library linking to the Mac OS X framework
  • -DDISABLE_OVERLAYNG=NO - Set to NO|YES (default) to enable OverlayNG use in Geometry overlay methods. (Note: as of GEOS 3.9 OverlayNG is the default)

Example:

$ cmake ../geos -DGEOS_ENABLE_TESTS=ON -DGEOS_ENABLE_INLINE=OFF

Note: when building a Mac OS X framework, you must specify the CMAKE_INSTALL_PREFIX. The default is /usr/local, and frameworks don't go there.

-DCMAKE_INSTALL_PREFIX=/Library/Frameworks

View / Change Variables via GUI

Use ccmake . to interactively confirm or change variables

Build

To build, run make in BUILDDIR:

$ make

This creates:

  • GEOS C++ and C libraries in lib
  • Testing executables in bin

Test

Under CMake testing is performed by CTest.

After building, tests can be executed in BUILDDIR. Natively, CMake uses a target named test:

$ make test

For convenience an Autotools-like check target is available:

$ make check

It is possible to run ctest directly. This gives access to ctest command line options (see ctest --help for a listing).

$ ctest
$ ctest --verbose

A list of GEOS test suites is obtained by running ctest --show-only:

$ ctest --show-only
# 
# Test project /home/dan/dev/libgeos/cmake-build-debug
#  Test #1: test_geos_unit
#  Test #2: test_xmltester
#  Test #3: test_bug234
#  Test #4: test_sweep_line_speed

A subset of test suites can be run using a regular expression (and in this case, running 4 jobs in parallel):

$ ctest --tests-regex test_ --parallel 4

Individual test classes within the test_geos_unit suite can be run by calling the test_geos_unit executable directly:

$ bin/test_geos_unit capi::GEOSNode

Individual tests within a test class can be run by specifying the test number:

$ bin/test_geos_unit capi::GEOSNode 1

There are additional tests (typically for performance) which are built, but not run as part of the standard test suite. These can be run from the command line:

$ bin/perf_iterated_buffer

Install

In order to install both C and C++ API libraries as well as headers, stay on in BUILDDIR and execute:

$ make install

Uninstall

Still in BUILDDIR, run:

$ make uninstall

Open Tickets

#935
incorrect cmake instruction
#1068
Fix CMake Windows install: keep geos-config.cmake

Last modified 9 days ago Last modified on Nov 26, 2020, 4:13:53 PM