autocmake/doc/about.rst
2015-06-22 15:24:26 +02:00

71 lines
2.7 KiB
ReStructuredText

About Autocmake
===============
You typically want to use CMake when you get tired of manually editing
Makefiles. Autocmake is for people who are tired of editing CMake files
directly. Autocmake assembles CMake modules, generates ``CMakeLists.txt`` as
well as ``setup.py``, which serves as a front-end to ``CMakeLists.txt``. All
this is done based on a lightweight ``autocmake.cfg`` file::
update.py --self
| |
| fetches Autocmake |
| infrastructure |
v Developer maintaining
autocmake.cfg Autocmake
| |
| update.py |
| |
v v
CMakeLists.txt (and setup.py front-end)
| |
| setup.py |
| which invokes CMake |
v User of the code
Makefile (or something else) |
| |
| make |
| |
v v
Build/install/test targets
Why Autocmake
-------------
The main motivation for us to create Autocmake as a CMake framework library and
CMake module composer was to simplify CMake code transfer between codes. We got
tired of manually diffing and copy-pasting boiler-plate CMake code and watching
it diverge while maintaining the CMake infrastructure in a growing number of
scientific projects which typically have very similar requirements:
- Fortran and/or C and/or C++ support
- Tuning of compiler flags
- Front-end script for the CMake-unaware user (setup.py)
- Support for parallelization: MPI, OMP, CUDA
- Math libraries: BLAS, LAPACK
Our other motivation for Autocmake was to make it easier for developers who do
not know CMake to generate a CMake infrastructure within minutes by providing
a higher-level entry point.
Autocmake is a chance to provide a well documented and tested set of CMake
plug-ins. With this we wish to give also users of codes the opportunity to
introduce the occasional tweak without the need to read CMake documentation.
Explicit is better than implicit
--------------------------------
Our design principle is to let Autocmake do one thing, as explicitly as
possible and to minimize "hidden" actions in the background.
Convention over configuration
-----------------------------
Our guideline is to follow good established conventions in order to allow users
and developers to recognize the configuration when moving to a new project.