The configuration is done by passing CMake options and environment variables at the configuration stage, i.e.:
$ cmake . -B build ${CMAKE_OPTIONS}Replace the variable CMAKE_OPTIONS with appropriate built-in CMake options, e.g.
-DCMAKE_C_COMPILER=gcc, and spglib-specific options. For a list of useful options
check CMake Options.
All spglib-specific options are prefixed with SPGLIB_ in order to avoid clashes
and allow the project to be included via FetchContent.
Keep in mind that in order to pass CMake options they have to be prefixed with -D,
e.g. -DSPGLIB_WITH_Fortran=ON.
| Option | Default | Description |
|---|---|---|
| SPGLIB_SHARED_LIBS | ON | Build spglib as a shared library. Turn off to build static. |
| SPGLIB_WITH_Fortran | OFF | Build Fortran API |
| SPGLIB_WITH_Python | OFF | Build Python API |
| SPGLIB_WITH_TESTS | ON | Include basic tests |
| SPGLIB_USE_OMP | OFF | Use OpenMP |
| SPGLIB_USE_SANITIZER | "" | Specify a sanitizer to compile with e.g. address |
| CMAKE_INSTALL_PREFIX | OS specific (e.g. /usr/local) |
Location where to install built project |
| BUILD_SHARED_LIBS | ON | Whether to build shared or statically linked libraries (Currently unsupported) |
We currently support two ways of linking this project: using native cmake or via pkg-config.
The native CMake package and namespace are Spglib. The CMake targets and pkg-config files
exported are:
| CMake target | pkg-config file | Description |
|---|---|---|
Spglib::symspg |
spglib |
Main C library |
Spglib::omp |
--- | Equivalent to Spglib::symspg Guaranteed OpenMP support |
Spglib::fortran |
spglib_f08 |
Fortran wrapper |
An example CMakeLists.txt to link via native cmake:
project(foo)
find_package(Spglib REQUIRED)
add_library(foo_library)
target_link_libraries(foo_library PRIVATE Spglib::symspg)Additionally, we provide convenient components and variables to control and check the spglib library:
| Component | Imported target | CMake variable | Description |
|---|---|---|---|
static |
--- | Spglib_LIB_TYPE |
Link against statically built libraries |
shared |
--- | Spglib_LIB_TYPE |
Link against shared libraries |
fortran |
Spglib::fortran |
Spglib_Fortran |
Check and include Fortran target |
omp |
Spglib::omp |
Spglib_OMP |
Check and include OpenMP target |
See example/CMakeLists.txt for a more complete example.
Note that this library is built as a shared library, unless it is imported via
FetchContent or equivalent approaches. This can be controlled via SPGLIB_SHARED_LIBS.
Alternatively, you can download spglib automatically using
FetchContent,
and compile it with specific options in CMake Options, e.g.:
project(foo)
FetchContent_Declare(
Spglib
GIT_REPOSITORY https://github.com/spglib/spglib
GIT_TAG main
)
set(SPGLIB_USE_OMP ON)
FetchContent_MakeAvailable(Spglib)
add_library(foo_library)
target_link_libraries(foo_library PRIVATE Spglib::symspg)