Fortran Package Manager (fpm)
Fortran Package Manager (fpm) is a package manager and build system for Fortran. Its key goal is to improve the user experience of Fortran programmers. It does so by making it easier to build your Fortran program or library, run the executables, tests, and examples, and distribute it as a dependency to other Fortran projects. Fpm's user interface is modeled after Rust's Cargo, so if you're familiar with that tool, you will feel at home with fpm. Fpm's long term vision is to nurture and grow the ecosystem of modern Fortran applications and libraries.
Fpm is an early prototype and is evolving rapidly. You can use it to build and package your Fortran projects, as well as to use existing fpm packages as dependencies. Fpm's behavior and user interface may change as it evolves, however as fpm matures and we enter production, we will aim to stay backwards compatible. Please follow the issues to contribute and/or stay up to date with the development. Before opening a bug report or a feature suggestion, please read our Contributor Guide. You can also discuss your ideas and queries with the community in fpm discussions, or more broadly on Fortran-Lang Discourse.
Fortran Package Manager is not to be confused with Jordan Sissel's fpm, a more general, non-Fortran related package manager.
x86-64binaries are available to download for Windows, MacOS and Linux.
Note: On Linux and MacOS, you will need to enable executable permission before you can use the binary.
$ chmod u+x fpm-0.4.0-linux-x86_64
Fpm is available on conda-forge, to add conda-forge to your channels use:
conda config --add channels conda-forge
Fpm can be installed with:
conda create -n fpm fpm conda activate fpm
Fpm is available as MinGW package in the MSYS2 package manager. To install fpm with pacman use
pacman -S mingw-w64-x86_64-fpm
Afterwards fpm will be available for usage. Currently
ucrt-x86_64are supported MinGW architectures for fpm. For more details check the package information here.
Fpm is available with spack in its develop version. To install fpm from spack use
spack install fpm
You can add
+openmpto enable parallelization of the target compilation in fpm. To use fpm in your environment load it with
spack load fpm
For more details check the package information here.
To setup fpm within Github actions for automated testing, you can use the fortran-lang/setup-fpm action.
For other platforms and architectures have a look at the bootstrapping instructions.
Creating a new fpm project is as simple as running the command
fpm new project_name. This will create a new folder in your current directory with the following contents and initialized as a git repository.
fpm.toml– with your project’s name and some default standard meta-data
README.md– with your project’s name
src/project_name.f90– with a simple hello world subroutine
--appflag used) – a program that calls the subroutine
--testflag used) – an empty test program
fpm understands the basic commands:
fpm build– build your library, executables and tests
fpm run– run executables
fpm test– run tests
fpm install- installs the executables locally
fpm runcan optionally accept the name of the specific executable to run, as can
fpm test; like
fpm run specific_executable. Command line arguments can also be passed to the executable(s) or test(s) with the option
-- some arguments.
This guide explains the process of building fpm on a platform for the first time. To build fpm without a prior fpm version a single source file version is available at each release.
To build manually using the single source distribution, run the following code (from within the current directory)
mkdir _tmp curl -LJ https://github.com/fortran-lang/fpm/releases/download/v0.4.0/fpm-0.4.0.F90 > _tmp/fpm.F90 gfortran -J _tmp _tmp/fpm.F90 -o _tmp/fpm _tmp/fpm install --flag "-g -fbacktrace -O3" rm -r _tmp
To automatically bootstrap using this appoach run the install script
You can set your Fortran compiler and the compiler flags with the