Code Monkey home page Code Monkey logo

make-runner's Introduction

make-runner

Transform GNU Make into a simple task runner.

Motivation

GNU Make is a universal tool that is available virtually anywhere. It, however, also has a lot of peculiarities and its default configuration is targeted towards building C projects. This makes perfect sense since it was meant for this. By adjusting a few knobs it can be transformed into a general purpose task runner that is useful in conjunction with almost any kind of project.

At this point, I would like to point out another great project: 🤖 Just

Just is written in Rust and comes along without the GNU make peculiarities. It was specifically developed as just a task runner. The project is still young and not available everywhere but you might be starting a new project in environments you control. Check it out!

GNU make is particularly great for running interactive commands. Something where even really great build tools like Gradle fail to deliver. Its perfect interoperability with shell scripting is also something that simplifies fast automation of simple tasks, and all that without a lot of overhead.

Portability

Writing scripts to automate common tasks is simple and fast, however, sharing them between different users with different operating systems is not. We usually can ignore Windows because there are enough projects out there that offer them access to the GNU world, even provided by Microsoft itself. However, portability between Linux and Mac (or BSD in general) is a different story.

A clear goal of this project is to provide abstractions that ensure portability between Linux and Mac.

Installation

This framework is meant to be installed inside your git repository and that you commit its files to your repository. Execute the following command inside the root of your project’s git repository:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Fleshgrinder/make-runner/v0.1.0/bin/installer)"

You will find a Makefile in the root of your repository after the installer finished and you are ready to go.

Recommended Software

You should install some programs in order to get the most out of your make-runner installation. In fact, every user of your repositories should install those programs because otherwise, it will be hard for you to write scripts, well, unless you run absolutely everything through Docker. While in general, it’s recommendable to run as much as possible through Docker, not everything makes sense.

Scripts are included to simplify the bootstrapping of a new system. They are available via the command make bootstrap-system which tries to detect the operating system and install the right software. Note that this command requires you to use sudo on a Linux system.

You can also install everything manually or even before you run the installer by executing the bootstrap script that matches your system. Have a look at the bin directory and the bootstrap- scripts. You can execute any of them like the installer. On a Mac you would execute the following command:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Fleshgrinder/make-runner/v0.1.0/bin/bootstrap-mac)"

What exactly is being installed depends on the system, but in general the following software is recommended:

You undoubtedly noticed that most of the things from this list are GNU projects. The idea is to ensure portability by standardizing on the default tools that come along with most Linux distros and free software. Also, most of the help you will find online is targeting GNU tools. Standardizing on them means that you can reuse that information for your scripts.

Usage

Be sure to read about the recommended software before you continue. Also make sure to install the recommended software on all systems you target, otherwise you might run into compatibility and portability issues.

A typical problem is Bash on Mac. Apple ships a very old version and users are not aware of that. Many Bash features will not be available with this ancient Bash version and fail with weird error messages.

You will find a few new files in your repository after the installation, let’s go through them. resources/make contains all files that make up the make-runner project and the most important file in there is bootstrap.mk. It contains the logic that turns GNU Make into a simple task runner by applying various defaults. Take your time and go through it. Everything inside it is properly documented and should not leave any questions unanswered (open an issue if you think that anything is not clear and requires a better explanation).

There is also the config.mk with a few defaults. This file can be customized by you and is always loaded in the bootstrap process. It is the perfect place to collect global settings of your own project.

Next up are the utilities that you find the utils directory. All scripts in that directory are available to you globally, meaning, you can call them from your own Bash scripts without any special setup as long as you go through make-runner. Go through the various scripts and read their documentation.

Writing Makefiles

Write your Makefiles like you always do and simply include resources/make/bootstrap.mk, however, always include it after all other includes. This ensures that the special make help (aka. make goals, make targets) goal can pick up all goals in its output.

Speaking of which, you can control which goals show up in make help by including a comment after the goal signature that starts with two hash signs, e.g.:

include resources/make/bootstrap.mk

goal-that-shows-up-in-make-help: ## this text will be displayed next to it
	:

this-will-not-show-up: # :)
	:

License

This is free and unencumbered software released into the public domain.

For more information, please refer to UNLICENSE.

make-runner's People

Contributors

fleshgrinder avatar msiebeneicher avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

msiebeneicher

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.