Virtual environments for compiled libraries and applications

Compiling software in a restricted environment requires changing essential environment variables and finding a place where to install the final product. This is a tedious task that can be mitigated by a simple shell script that sets up the appropriate directory and overrides the path variables:

$ cenv foo
$ (foo) ./configure --prefix=$CENV && make && make install

Because this script only knows about a limited set of environment variables, you can add more by running

$ cenv --edit foo

This will open a local file that is sourced right before starting the new subshell and in which you can define more variables to be exported.

To make it work even more like a Python virtualenv, you could alias common build tools in your .bashrc to include the prefix implicitly:

alias cmake="cmake -DCMAKE_INSTALL_PREFIX=$CENV"
alias configure="configure --prefix=$CENV"

This little script works for my use case but there are of course alternatives: lightweight containers (either raw or using Docker) or virtual machines being some of them.


Discussion