# mkproj Generic project templates for tools, filters, libraries in C++. ## Installation Type `make` to install the `mkproj` script, its man page, and the templates. The default location is to put everything inside your `~/.local` hierarchy, but you can change that by defining an environment variable `PREFIX`, giving it your desired root directory as a value, before typing `make`. The actual location used will be recorded in a config file: `~/.config/mkprojrc`, which will be read by the `mkproj` script. It needs to know where your templates are in order to function. ## Overview With `mkproj`, you can create a C++ project for a tool or a library. The project can be: - a simple tool, to test some idea; - a more elaborate tool, meant to be distributed; - a UNIX filter, which processes input files line by line, or reads from standard input when there are no input files; - a library, where both a static and a dynamic library will be built. Apart from the simple tool, all of these can optionally: - use a precompiled header for the C++ Standard Library; - implement a plugin architecture, where building and installing plugins is automatically supported. At the center is a `Makefile`, which should not be altered. This `Makefile` can build and install any of these projects. All project-specific additions should be put in the mandatory `premake.make` (which is included at the start of the Makefile), and in an optional `postmake.make` (which is included at the end of the Makefile). The `premake.make` typically defines some Make variables, whereas the `postmake.make` typically contains extra Make targets. The `premake.make` is mandatory, because it defines the *name* of the tool or library, and its *version*. This is also where you declare external dependencies. Available Make targets for your project are: - `make` will build the tool or library; - `make test` will build and run tests, using the Boost Unit Test Framework; - `sudo make install` will install it, and all of its accompanying files; - `make clean` will remove compiled object files, but will keep a previously built tool or library, and the precompiled header; - `make dist-clean` will bring the project to a pristine state. - `sudo make uninstall` will remove all installed files. ## Documentation `man mkproj`