44 lines
2.2 KiB
ReStructuredText
44 lines
2.2 KiB
ReStructuredText
|
|
Dune Projects and Workspaces
|
||
|
|
============================
|
||
|
|
|
||
|
|
Whenever Dune builds anything, it does so at the level of a *Dune workspace*. A
|
||
|
|
Dune workspace is a set of Dune projects. A typical workspace consists of a
|
||
|
|
single Dune project.
|
||
|
|
|
||
|
|
A *Dune project* is defined by the presence of a
|
||
|
|
:doc:`/reference/dune-project/index` file. Each Dune project extends over the
|
||
|
|
file tree rooted at the directory containing the
|
||
|
|
:doc:`/reference/dune-project/index` file, excluding any nested Dune projects.
|
||
|
|
|
||
|
|
Dune determines the root of the current workspace by finding the topmost
|
||
|
|
ancestor containing a :doc:`/reference/dune-project/index` file or by the
|
||
|
|
presence of a :doc:`/reference/dune-workspace/index` file (see
|
||
|
|
:ref:`finding-root` and :ref:`forcing-root` for details).
|
||
|
|
|
||
|
|
Different Dune projects within the same Dune workspace are independent of each
|
||
|
|
other and no settings are shared between them, even if they are nested within
|
||
|
|
each other.
|
||
|
|
|
||
|
|
Settings in :doc:`/reference/dune-workspace/index`, on the other hand, are
|
||
|
|
inherited by all Dune projects in the workspace. Some settings (those that make
|
||
|
|
sense for all projects) can be specified both in
|
||
|
|
:doc:`/reference/dune-project/index` and :doc:`/reference/dune-workspace/index`
|
||
|
|
files, with the former taking precedence. Note that all
|
||
|
|
:doc:`/reference/dune-workspace/index` files other than the one specifying the
|
||
|
|
root of the workspace are ignored.
|
||
|
|
|
||
|
|
Within a Dune project, :doc:`/reference/dune/index` files are used to define all
|
||
|
|
objects of interest for Dune: libraries, executables, tests, etc. There are
|
||
|
|
typically many :doc:`/reference/dune/index` files in a Dune project: one per
|
||
|
|
directory, unless the directory does not contain anything relevant to Dune. In
|
||
|
|
each :doc:`/reference/dune/index` file, references are resolved relative to the
|
||
|
|
directory containing the file.
|
||
|
|
|
||
|
|
Note that there are specific stanzas and actions that may result in exceptions
|
||
|
|
to some of the rules stated in the previous paragraph. See, for example, the
|
||
|
|
:doc:`/reference/dune/subdir` and :doc:`/reference/dune/include_subdirs`
|
||
|
|
stanzas, as well as the :doc:`/reference/actions/chdir` action.
|
||
|
|
|
||
|
|
Finally, note that only public items (public libraries, public executables) of a
|
||
|
|
Dune project are visible to other Dune projects within the same Dune workspace.
|