Erlang.mk User Guide

Loïc Hoguin


Table of Contents

1. Installation
1.1. On Unix
1.2. On Windows
2. Getting started
2.1. Creating a folder for your project
2.2. Downloading Erlang.mk
2.3. Getting started with OTP applications
2.4. Getting started with OTP libraries
2.5. Getting started with OTP releases
2.6. Getting started from scratch
2.7. Using spaces instead of tabs
2.8. Using templates
2.9. Hiding Erlang.mk from git
2.10. Getting help
3. Overview
3.1. Building your project
3.2. Exploring the package index
3.3. Generating documentation
3.4. Running tests
3.5. Need more?
4. Updating Erlang.mk
4.1. Initial bootstrap
4.2. Updating
4.3. Customizing the build
5. Limitations
5.1. Erlang must be available
5.2. Spaces in path
5.3. Dependency tracking and modification times
I. Code
6. Building
6.1. How to build
6.2. What to build
6.3. Application resource file
6.4. Automatic application resource file values
6.5. File formats
6.6. Compilation options
6.7. Cold and hot builds
6.8. Dependency tracking
6.9. Generating Erlang source
6.10. Cleaning
7. Packages and dependencies
7.1. Searching packages
7.2. Adding dependencies to your project
7.3. How deps are fetched and built
7.4. Fetching and listing dependencies only
7.5. Ignoring unwanted dependencies
7.6. Dependencies directory
7.7. Many applications in one repository
7.8. Repositories with no application at the root level
7.9. Autopatch
7.10. Dealing with duplicate modules
7.11. Skipping deps
8. NIFs and port drivers
8.1. C source code location and Erlang environment
8.2. Using a custom Makefile
8.3. Using Erlang.mk directly
8.4. Propagating compile and linker flags to sub-Makefiles
9. Releases
9.1. Setup
9.2. Configuration
9.3. Generating the release
9.4. Running the release
9.5. Upgrading a release
9.6. Getting Relx semver value
10. Self-extracting releases
10.1. Generating the self-extracting archive
10.2. Running the release
11. Escripts
11.1. Requirements
11.2. Generating an escript
11.3. Configuration
11.4. Extra files
11.5. Optimizing for size
12. OTP version management
12.1. Erlang versions
12.2. OTP version pinning
12.3. Continuous integration
12.4. Configuring Kerl
13. Cross compiling
13.1. Compiling
13.2. Building the release
14. Compatibility with other build tools
14.1. Rebar projects as Erlang.mk dependencies
14.2. Erlang.mk projects as Rebar dependencies
II. Documentation
15. AsciiDoc documentation
15.1. Requirements
15.2. Writing AsciiDoc documentation
15.3. Configuration
15.4. Usage
16. EDoc comments
16.1. Writing EDoc comments
16.2. Configuration
16.3. Usage
16.4. Running EDoc on all applications
17. Sphinx documentation
17.1. Writing Sphinx documentation
17.2. Basic setup
17.3. Erlang.mk configuration
17.4. Generating man pages
III. Tests
18. Erlang shell
18.1. Configuration
18.2. Usage
19. EUnit
19.1. Writing tests
19.2. Configuration
19.3. Usage
20. Common Test
20.1. Writing tests
20.2. Configuration
20.3. Usage
21. Triq
22. Code coverage
23. Continuous integration
23.1. Configuring Erlang/OTP versions to test
23.2. Running tests across all configured versions
23.3. Extending the CI targets
24. Dialyzer
24.1. How it works
24.2. Configuration
24.3. Usage
24.4. Dialyzing beam files
25. Xref
IV. Third-party plugins
26. External plugins
26.1. Loading all plugins from a dependency
26.2. Loading one plugin from a dependency
26.3. Writing external plugins
26.4. Early-stage plugins
26.5. Loading plugins local to the application
27. List of plugins
27.1. ci.erlang.mk
27.2. efene.mk
27.3. elixir.mk
27.4. elvis.mk
27.5. geas
27.6. hexer.mk
27.7. hexpm.mk
27.8. jorel
27.9. lfe.mk
27.10. mix.mk
27.11. reload.mk
27.12. rust.mk
27.13. version.mk
V. About Erlang.mk
28. Why Erlang.mk
28.1. Erlang.mk is fast
28.2. Erlang.mk gives you the full power of Unix
28.3. Erlang.mk is a text file
28.4. Erlang.mk can manage Erlang itself
28.5. Erlang.mk can do more than Erlang
28.6. Erlang.mk integrates nicely in Make and Automake projects
29. Short history
29.1. Before Erlang.mk
29.2. Lifetime of the project
30. Contributing
30.1. Priorities
30.2. Bugs
30.3. Code
30.4. Packages
30.5. Documentation
30.6. Feature requests