ecbuild_add_library¶
Add a library with a given list of source files.
ecbuild_add_library( TARGET <name>
SOURCES <source1> [<source2> ...]
[ SOURCES_GLOB <glob1> [<glob2> ...] ]
[ SOURCES_EXCLUDE_REGEX <regex1> [<regex2> ...] ]
[ TYPE SHARED|STATIC|MODULE|OBJECT|INTERFACE ]
[ OBJECTS <obj1> [<obj2> ...] ]
[ TEMPLATES <template1> [<template2> ...] ]
[ LIBS <library1> [<library2> ...] ]
[ PRIVATE_LIBS <library1> [<library2> ...] ]
[ PUBLIC_LIBS <library1> [<library2> ...] ]
[ INCLUDES <path1> [<path2> ...] ]
[ PRIVATE_INCLUDES <path1> [<path2> ...] ]
[ PUBLIC_INCLUDES <path1> [<path2> ...] ]
[ DEFINITIONS <definition1> [<definition2> ...] ]
[ PERSISTENT <file1> [<file2> ...] ]
[ GENERATED <file1> [<file2> ...] ]
[ DEPENDS <target1> [<target2> ...] ]
[ CONDITION <condition> ]
[ PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
[ NOINSTALL ]
[ HEADER_DESTINATION <path> ]
[ INSTALL_HEADERS LISTED|ALL ]
[ INSTALL_HEADERS_LIST <header1> [<header2> ...] ]
[ INSTALL_HEADERS_REGEX <pattern> ]
[ VERSION <version> | AUTO_VERSION ]
[ SOVERSION <soversion> | AUTO_SOVERSION ]
[ CFLAGS <flag1> [<flag2> ...] ]
[ CXXFLAGS <flag1> [<flag2> ...] ]
[ FFLAGS <flag1> [<flag2> ...] ]
[ LINKER_LANGUAGE <lang> ]
[ OUTPUT_NAME <name> ] )
Options¶
- TARGETrequired
target name
- SOURCESrequired
list of source files
- TYPEoptional
library type, one of:
- SHARED
libraries are linked dynamically and loaded at runtime
- STATIC
archives of object files for use when linking other targets.
- MODULE
plugins that are not linked into other targets but may be loaded dynamically at runtime using dlopen-like functionality
- OBJECT
files are just compiled into objects
- INTERFACE
no direct build output, but can be used to aggregate headers, compilation flags and libraries
- SOURCES_GLOBoptional
search pattern to find source files to compile (note: not recommend according to CMake guidelines) it is usually better to explicitly list the source files in the CMakeList.txt
- SOURCES_EXCLUDE_REGEXoptional
search pattern to exclude source files from compilation, applies o the results of SOURCES_GLOB
- OBJECTSoptional
list of object libraries to add to this target
- TEMPLATESoptional
list of files specified as SOURCES which are not to be compiled separately (these are commonly template implementation files included in a header)
- LIBS(DEPRECATED) optional
list of libraries to link against (CMake targets or external libraries), behaves as PUBLIC_LIBS Please use target_link_libraries instead
- PRIVATE_LIBSoptional
list of libraries to link against (CMake targets or external libraries), they will not be exported
- PUBLIC_LIBSoptional
list of libraries to link against (CMake targets or external libraries), they will be exported
- INCLUDES(DEPRECATED) optional
list of paths to add to include directories, behaves as PUBLIC_INCLUDES Please use target_include_directories instead
- PUBLIC_INCLUDES(DEPRECATED) optional
list of paths to add to include directories which will be publicly exported to other projects Please use target_include_directories instead
- PRIVATE_INCLUDES(DEPRECATED) optional
list of paths to add to include directories which won’t be exported to other projects Please use target_include_directories instead
- DEFINITIONS(DEPRECATED) optional
list of definitions to add to preprocessor defines Please use target_compile_definitions instead
- PERSISTENToptional
list of persistent layer object files
- GENERATEDoptional
list of files to mark as generated (sets GENERATED source file property)
- DEPENDSoptional
list of targets to be built before this target
- CONDITIONoptional
conditional expression which must evaluate to true for this target to be built (must be valid in a CMake
if
statement)- PROPERTIESoptional
custom properties to set on the target
- NOINSTALLoptional
do not install the library
- HEADER_DESTINATION
directory to install headers (if not specified, INSTALL_INCLUDE_DIR is used) Note: this directory will automatically be added to target_include_directories
- INSTALL_HEADERSoptional
specify which header files to install:
- LISTED
install header files listed as SOURCES
- ALL
install all header files ending in .h, .hh, .hpp, .H
- INSTALL_HEADERS_LISToptional
list of extra headers to install
- INSTALL_HEADERS_REGEXoptional
regular expression to match extra headers to install
- VERSIONoptional, AUTO_VERSION or LIBS_VERSION is used if not specified
build version of the library
- AUTO_VERSIONoptional, ignored if VERSION is specified
use MAJOR.MINOR package version as build version of the library
- SOVERSIONoptional, AUTO_SOVERSION or LIBS_SOVERSION is used if not specified
ABI version of the library
- AUTO_SOVERSIONoptional, ignored if SOVERSION is specified
use MAJOR package version as ABI version of the library
- CFLAGSoptional
list of C compiler flags to use for all C source files
See usage note below.
- CXXFLAGSoptional
list of C++ compiler flags to use for all C++ source files
See usage note below.
- FFLAGSoptional
list of Fortran compiler flags to use for all Fortran source files
See usage note below.
- LINKER_LANGUAGEoptional
sets the LINKER_LANGUAGE property on the target
- OUTPUT_NAMEoptional
sets the OUTPUT_NAME property on the target
Usage¶
The CFLAGS
, CXXFLAGS
and FFLAGS
options apply the given compiler
flags to all C, C++ and Fortran sources passed to this command, respectively.
If any two ecbuild_add_executable
, ecbuild_add_library
or
ecbuild_add_test
commands are passed the same source file and each sets
a different value for the compiler flags to be applied to that file (including
when one command adds flags and another adds none), then the two commands
will be in conflict and the result may not be as expected.
For this reason it is recommended not to use the *FLAGS
options when
multiple targets share the same source files, unless the exact same flags are
applied to those sources by each relevant command.
Care should also be taken to ensure that these commands are not passed source files which are not required to build the target, if those sources are also passed to other commands which set different compiler flags.