Skip Navigation
  • bmakelib v0.7.0

    github.com Release v0.7.0 Β· bahmanm/bmakelib

    The highlight is the introduction of fail-fast alternative to $(shell) which relieves you from checking .SHELLSTATUS every time $(shell) is used. Makefile: VAR1 := $(call bmakelib.shell.error-if-no...

    Release v0.7.0 Β· bahmanm/bmakelib

    bmakelib v0.7.0 has just been released.

    The highlight is the fail-fast alternative to $(shell) which relieves you from checking .SHELLSTATUS every time $(shell) is used.

    ---

    Makefile:

    ```makefile include bmakelib/bmakelib.mk

    VAR1 := $(call bmakelib.shell.error-if-nonzero,\ echo Fails hard❗ && false)

    unreachable-target : ```

    Shell:

    text $ make unreachable-target Makefile:3: *** shell.error-if-nonzero: Command exited with non-zero value 1. Stop.

    0
  • bmakelib v0.6.0 with enums

    github.com Release v0.6.0 Β· bahmanm/bmakelib

    The highlight of this release is the introduction of enum (aka variants or options) which can be used to limit and validate a variable's value. For example: Makefile: define-enum : bmakelib.enum.de...

    Release v0.6.0 Β· bahmanm/bmakelib

    bmakelib is a collection of useful targets, recipes and variables you can use to augment your Makefiles.

    ---

    I just released bmakelib v0.6.0 w/ the main highlight being the ability to define enums and validate variable values against them.

    ---

    ➀ Makefile:

    ```Makefile define-enum : bmakelib.enum.define( DEPLOY-ENV/dev,staging,prod ) include define-enum

    deploy : bmakelib.enum.error-unless-member( DEPLOY-ENV,ENV ) deploy : @echo πŸš€ Deploying to $(ENV)... ```

    ➀ Shell:

    ```text $ make ENV=local-laptop deploy *** 'local-laptop' is not a member of enum 'DEPLOY-ENV'. Stop.

    $ make ENV=prod deploy πŸš€ Deploying to prod... ```

    0
  • How do you comment your makefiles?

    Fed up w/ my ad-hoc scripts to display the targets and variables in a makefile(s), I've decided to write a reusable piece of code to do that: https://github.com/bahmanm/bmakelib/issues/81

    ---

    The first step toward that would be to understand the common commenting styles. So far I have identified 4 patterns in the wild which you can find below.

    Are there any style guides/conventions around this topic? Any references to well-written makefiles I can get inspiration from?

    ---

    A

    VAR1 = foo ## short one-liner comment my-target: ## short one-liner comment …

    B

    ```

    longer comment which

    may span

    several lines

    VAR1 = foo

    comments can be prefixed w/ more than

    lorem ipsum dolor

    my-target: … ```

    C

    ```

    a comment block which is marked w/ several #s on

    an otherwise blank line

    VAR1 = foo ```

    D

    ```

    #> # heading 1

    This is a variation to have markdown comments

    inside makefile comments.

    ## It's a made-up style!

    I came up w/ this style and used it to document bmakelib.

    For example: https://is.gd/QtiqyA (opens github)

    #<

    VAR1 = foo ```

    3
  • www.bahmanm.com GNU Make - Unconditionally run a target before any other targets

    When writing a (GNU) Makefile, there are times when you need a particular target(s) to be run before anything else.

    > When writing a (GNU) Makefile, there are times when you need a particular target(s) to be run before anything else. That can be for example to check the environment, ensure variables are set or prepare a particular directory layout. > >... take advantage of GNU Make's mechanism of includeing and makeing makefiles which is described in details in the manual:

    0
  • bmakelib - Print available Make targets and variables along w/ their docs

    github.com Print the available targets and variables along w/ their docs Β· Issue #81 Β· bahmanm/bmakelib

    bmakelib should contain a target to list all available targets along w/ their documentation. For example: $ make bmakelib.help TARGETS ------- foo: foo inline docs bar: bar inline docs baz: no docu...

    Print the available targets and variables along w/ their docs Β· Issue #81 Β· bahmanm/bmakelib

    I'm trying to gather requirements wrt a potential bmakelib feature linked in the post.

    I'd appreciate your feedback around:

    • What are the conventions you follow to document your Makefiles?
    • How/where do you usually declare variables and how do you document them?

    ---

    Please take a second to share your thoughts on the issue or simply reply to this post if you'd prefer πŸ™

    0
  • Variables in GNU Make: Simple and Recursive

    www.bahmanm.com Variables in GNU Make: Simple and Recursive

    There are two major flavours of variables in GNU Make: "simple" and "recursive".

    >There are two major flavours of variables in GNU Make: "simple" and "recursive". > >While simple variables are quite simple and easy to understand, they can be limiting at times. On the other hand, recursive variables are powerful yet tricky. > >... > >There is exactly one rule to recall when using recursive variables... > > 🧠 The value of a recursive variable is computed every time it is expanded.

    0
  • Using Make and cURL to measure Lemmy's performance

    github.com GitHub - bahmanm/lemmy-clerk at v0.0.1

    A web application to track Lemmy instances performance and represent the results visually - GitHub - bahmanm/lemmy-clerk at v0.0.1

    GitHub - bahmanm/lemmy-clerk at v0.0.1

    A follow up on [DISCUSS] Website to monitor Lemmy servers' performance/availability

    ---

    I wanted to experiment w/ Lemmy's APIs to, eventually, build a public-facing performance monitoring solution for Lemmy.

    It started w/ a couple of shell commands which I found myself repeating. Then I recalled the saying "Don't repeat yourself - make Make make things happen for you!" and, well, stopped typing commands in bash.

    Instead I, incrementally, wrote a makefile to do the crud work for me (esp thanks to its declarative style): https://github.com/bahmanm/lemmy-clerk/blob/v0.0.1/run-clerk

    ---

    TBH there's nothing special about the file. But I thought I'd share this primarily b/c it is a demonstration of the patterns I usually use in my makefiles and I'd love some feedback on those.

    Additionally, it's a real world use-case for bmakelib (a library that I maintain 😎 )

    0
1 Active user