Embedthis MakeMe™ Overview

makeme

MakeMe is a modern replacement for the venerable make and the not so popular autoconf tool. It manages the building of programs and products by direct compilation and the generation of IDE projects and Makefiles. MakeMe can portably build programs for Linux, Mac and Windows and handles cross-compilation with ease.

MakeMe Command

MakeMe is run via the "me" command. So to build a project, just type:

me

Just like make you can build specific targets which MakeMe calls goals:

me clean
me compile
me myapp

A Simple MakeMe File

A MakeMe file is written in Javascript, though with a .me extension. It contains a set of build instructions expressed as a Javascript object literal. For example:

Me.load({
    targets: {
        /* Build the rocket executable */
        rocket: {
            type: 'exe',
            sources: '*.c',
        },
    }, 
})

MakeMe files invoke Me.load to process build instructions. Arbitrary Javascript is permitted in MakeMe files, but typically, little script code is needed.

MakeMe files specify targets. These can be source files, libraries, executables or other actions to run. MakeMe has built-in rules to compile source code, build libraries, create executables, copy files, build packages and generate IDE projects. So, typically, you need to type very little to do the common tasks of building.

MakeMe files can intelligently inherit global settings for a project and can override or augment values locally. MakeMe files run with a current directory set to that of the '.me' file itself, so it can easily reference local resources. MakeMe projects are easy to relocate and avoid absolute directory references except for global tool chain programs and directories.

MakeMe also provides a "configure" capability where it searches for required and optional tools for building. MakeMe also supports cross-platform and cross-compilation building.

Why MakeMe?

Many projects rely on autoconf to configure products and 'make' to build. But autoconf is a baroque maze of scripts and make provides too little support for easily building executables and libraries in a cross platform manner. Further, neither of these tools work well for Windows and embedded platforms like VxWorks. Consequently, creating portable Makefiles and autoconf scripts that will work on a variety of platforms and support cross compilation is an exercise in patience. Often the result is slow, fragile build systems, especially on Windows.

MakeMe replaces both autoconf and make with a single utility. MakeMe provides a higher level of abstraction to easily specify the targets to build (libraries and executables) and can build directly on Linux, Mac OS X or Windows and cross compile for other platforms. It will generate native projects for Visual Studio, XCode, Make and Nmake projects. MakeMe builds fast without the complexity of autoconf and make.

History

MakeMe was initiated after evaluating Make, CMake and GYP for use by the Appweb and Ejscript projects in an embedded, cross compilation environment. While all three alternatives can be made to work, we (Embedthis) were expending too large a percentage of our time on the build system and less on the actual products. Out of this frustration, MakeMe was born. We do not expect MakeMe to be a universal replacement for Make or Autoconf for everyone, but for some users with needs similar to our own, it may be an excellent choice.

MakeMe Design Goals

When creating MakeMe, our design goals were:

MakeMe vs Make

Here is a quick list of differences between MakeMe and Make. These are broad, sweeping, and opinionated comments. Hopefully, with a grain of truth.

© Embedthis Software. All rights reserved.