---
name: "ocamldsort"
section: "1"
platform: "linux"
package: "ocamldsort"
version: "0.16.0-9+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ocamldsort"
---

# ocamldsort(1)

Dependency sorter for OCaml source files

## NAME

ocamldsort - Dependency sorter for OCaml source files

## SYNOPSIS

**ocamldsort** \[ **-pp**  *pre-command* \] \[ **-d** *dep-command* \]\
            \[ **-mli** \] \[ **-nox** \] \[ **-obj** \| **-byte** \| **-opt** \] \[ *filename* \] *...*

## DESCRIPTION

The [**ocamldsort**(1)](/ocamldsort/1.md) command scans a set of OCaml source files (.ml and .mli files), sorts them according to their dependencies and prints the sorted files in order to link their corresponding .cmo files.

For [**ocamldsort**(1)](/ocamldsort/1.md) to work it must get a list of dependencies generated by [**ocamldep**(1)](/ocamldep/1.md), if the standard input to [**ocamldsort**(1)](/ocamldsort/1.md) has been redirected then ocamldsort assumes that this is a dependency file generated by [**ocamldep**(1)](/ocamldep/1.md). Otherwise ocamldsort calls [**ocamldep**(1)](/ocamldep/1.md) to generate the dependency list itself. In either case the source files to be sorted should be given as arguments to the [**ocamldsort**(1)](/ocamldsort/1.md) command.

[**ocamldsort**(1)](/ocamldsort/1.md) can be used to compile and link simple projects with one command, such as:

ocamlc $(ocamldsort \*.ml)

if your project doesn't contain .mli files or:

```
ocamlc -c $(ocamldsort -mli *.ml *.mli) && ocamlc $(ocamldsort -byte *.ml)
```

if it contains .mli files.

However for larger projects where separate compilation is desirable, [**ocamldsort**(1)](/ocamldsort/1.md) can also be used from within a makefile. Here is a typical makefile example:

```
TARGET=my_program
OCAMLC=ocamlc
OCAMLOPT=ocamlopt
OCAMLDEP=ocamldep
OCAMLDSORT=ocamldsort
PPFLAGS=-pp camlp4o
MLY=$(shell echo *.mly)
MLL=$(shell echo *.mll)
GENERATED_ML=$(MLY:.mly=.ml) $(MLL:.mll=.ml)
include .generated .depend .ocamldsort
$(TARGET): $(CMO_FILES)
	$(OCAMLC) $(COMPFLAGS) $(LIBS) $^ -o $@
$(TARGET).opt: $(CMX_FILES)
	$(OCAMLOPT) $(COMPFLAGS) $(LIBS_OPT) $^ -o $@
.generated: $(GENERATED_ML)
	@touch .generated
.depend: .generated
	$(OCAMLDEP) *.ml *.mli > $@
.ocamldsort: .depend
	echo CMO_FILES=`< .depend $(OCAMLDSORT) -byte *.ml` > .ocamldsort
	echo CMX_FILES=`< .depend $(OCAMLDSORT) -opt *.ml` >> .ocamldsort
distclean: clean
	rm -f .generated .depend .ocamldsort
	rm -f $(GENERATED_ML)
	rm -f *~
	rm -f $(TARGET)
clean:
	rm -f *.cmo *.cmi *.cmx *.o
.SUFFIXES: .mli .ml .cmi .cmo .cmx .mll .mly
%.cmi:%.mli
	$(OCAMLC) $(PPFLAGS) $(COMPFLAGS) -c $<
%.cmo:%.ml
	$(OCAMLC) $(PPFLAGS) $(COMPFLAGS) -c $<
%.cmi %.cmo:%.ml
	$(OCAMLC) $(PPFLAGS) $(COMPFLAGS) -c $<
%.cmx %.o:%.ml
	$(OCAMLOPT) $(PPFLAGS) $(COMPFLAGS) -c $<
%.ml:%.mll
	$(OCAMLLEX) $<
%.mli %.ml:%.mly
	$(OCAMLYACC) -v $<
```

## OPTIONS

The following command-line options are recognized by  **ocamlsort**(1):

- **-I** *directory*

  Add the given directory to the list of directories searched for source files.

- **-pp** *pre-command*

  Command to preprocess file.

- **-d** *dep-command*

  Command to compute dependencies.  [**ocamldep**(1)](/ocamldep/1.md) by default.

- **-mli**

  Sort files using mli dependencies.

- **-nox**

  Ignore filenames containing \`\*' so that unexpanded wildcards are ignored.

- **-obj**

  Print bytecode filenames (.cmo and .cmi) (deprecated: use -byte).

- **-byte**

  Print bytecode filenames (.cmo and .cmi).

- **-opt**

  Print opt filenames (.cmx and .cmi).

- **-v**

  Output version information and exit.

- **-help**, **--help**

  Output help and exit.

## SEE ALSO

[**ocamldep**(1)](/ocamldep/1.md).
