Draft: Create a module library in dune_project
Summary
This MR adds a feature to the dune_project
macro to create directly a library for the dune module. This library target can then be referred to by the variable DUNE_PROJECT_TARGET
and is used in dune_add_test
as default link library.
Since this allows to create a default target for each module that each executables should link against inside that module, we can register properties in this target, like the include directories for the dune module and default compile flags.
Details
The dune_project
macro gets some additional (optional) arguments. It can be used as before without any argument to not create a default module library target. This has the consequence that we cannot register include directories in this target and thus have to set them globally.
The dune_project
macro has the following interface:
dune_project([<target>] [INTERFACE]
[OUTPUT_NAME <libname>]
[EXPORT_NAME <exportname>]
)
with the following optional parameters:
-
INTERFACE
: creates an interface library instead of a regular library. This can be used for header-only modules. -
OUTPUT_NAME
: Specifies the name of the library file, e.g.lib<libname>.so
orlib<libname>.a
. This parameter is directly forwarded to thedune_add_library
macro. If noOUTPUT_NAME
is given, the target name will be transformed into a proper output name bydune_module_to_output_name
, i.e., it will be transformed into a lowercase string where all non-alphanumeric characters are removed. -
EXPORT_NAME
: Specifies the name of the exported target to be used when linking against the library. If noEXPORT_NAME
is given, the target name will be transformed into a proper export name bydune_module_to_export_name
, i.e., it will be transformed into a lowercase string with anydune-
prefix removed removed.
TODO
-
Add CHANGELOG entry -
Squash the Commits