Customizing CMake modules ========================= The ``update.py`` script assembles modules listed in ``autocmake.yml`` into ``CMakeLists.txt``. Those that are fetched from the web are placed inside ``downloaded/``. You have several options to customize downloaded CMake modules: Directly inside the generated directory --------------------------------------- The CMake modules can be customized directly inside ``downloaded/`` but this is the least elegant solution since the customizations may be overwritten by the ``update.py`` script (use version control). Adapt local copies of CMake modules ----------------------------------- A slightly better solution is to download the CMake modules that you wish you customize to a separate directory (e.g. ``custom/``) and source the customized CMake modules in ``autocmake.yml``. Alternatively you can serve your custom modules from your own http server. Fork and branch the CMake modules --------------------------------- You can fork and branch the mainline Autocmake development and include the branched customized versions. This will make it easier for you to stay up-to-date with upstream development. Overriding settings ------------------- If you source a module which contains directives such as ``define``, ``docopt``, ``export``, or ``fetch``, and you wish to modify those, then you can override these settings in ``autocmake.yml``. Settings in ``autocmake.yml`` take precedence over settings imported by a sourced module. As an example consider the Boost module which defines and uses interpolation variables ``major``, ``minor``, ``patch``, and ``components``, see https://github.com/coderefinery/autocmake/blob/master/modules/boost/boost.cmake#L52-L55. The recommended way to customize these is in ``autocmake.yml``, e.g.: https://github.com/coderefinery/autocmake/blob/master/test/boost_libs/cmake/autocmake.yml#L12-L17. Create own CMake modules ------------------------ Of course you can also create own modules and source them in ``autocmake.yml``. Contribute customizations to the "standard library" --------------------------------------------------- If you think that your customization will be useful for other users as well, you may consider contributing the changes directly to https://github.com/coderefinery/autocmake/. We very much encourage such contributions. But we also strive for generality and portability.