🛠️
Notes
  • README
  • ansible
    • Literal curly braces (raw)
  • bash
    • Case statement
    • Change quote style mid-string
    • Comparing versions
    • Hiding credentials on the command line
    • Directory of script
    • Using find to run a command on multiple files
    • Getting the line number of the nth match
    • Getopts
    • Parsing output with long lines using less
    • Print line at number
    • Remove final newline
    • Reading content between markers
    • Determine if a script was sourced or executed
    • Bash substring
    • Run a function on interrupt or error
    • Reference variable by name
  • chrome
    • Bypassing Chrome's NET::ERR_CERT_INVALID page
  • css
    • box-sizing: border-box
    • The currentColor keyword
    • Wrapper taking up at least 100% height
    • Using margin: auto; for centering
    • Margin-collapse
    • Which unit to use?
    • Hiding elements
  • git
    • Conditional git config includes
    • Viewing the evolution of a line or function
    • Name of current branch
    • Get the path to the repository root
    • Replaying a set of changes on a specific branch
    • Hide file from git diff output
    • Listing untracked files with git status
  • github
    • Setting up GitHub Actions
  • groovy
    • Appending items to a list
  • kubernetes
    • Waiting for a pod to be ready
  • make
    • Passing arguments to make rules
    • Running make in a set of subdirectories
  • npm
    • Update a value in a project's .npmrc
  • podman
    • Target last container
  • rust
    • The match operator
    • Unwrapping a Result
  • tmux
    • New window with prompt
  • tools
    • Running ngrok in the background
    • Using entr to react to file changes
  • typescript
    • Inferring the type of elements in an array
  • vim
    • The command-line window
    • Populate quickfix list with eslint errors
    • Visual increment
    • Opening a list of files in split windows
    • Insert line above matched line
    • Spelling
    • The tabular plugin
    • Populate quickfix list with tsc errors
  • yaml
    • Yaml multiline strings
  • zsh
    • Lazy loading command setup
Powered by GitBook
On this page

Was this helpful?

  1. make

Passing arguments to make rules

A word of caution: this sort of goes against how make is intended to be used. But it can be convenient, and fun.

action:
  @echo command $(filter-out $@,$(MAKECMDGOALS))

%:
  @:

Example call:

make action arg1 arg2
  • $(MAKECMDGOALS) is the list of targets passed to make (action arg1 arg2)

  • $@ is an automatic variable expanding to the name of the target rul (action)

  • filter-out is a function that removes items from a list: filter-out $@,$(MAKECMDGOALS) -> arg1 arg2

  • % is a wildcard. If no rule is matched (as for arg1 and arg2 in the example), this goal will be run

  • : is a no-op. It means "do nothing", like the bash equivalent

  • @ in front of a recipe makes it silent

The result is that command will be invoked as: command arg1 arg2. make will still recognize arg1 and arg2 as targets, but will run the wildcard rule for them, silently doing nothing.

A side effect of the wildcard target is that make won't complain if we pass an invalid target - it will just silently do nothing:

make non-existing targets

And if one of the arguments we want to pass to command also is the name of another target, recipes in that rule will be executed as well - which probably is not somehting we want.

PreviousWaiting for a pod to be readyNextRunning make in a set of subdirectories

Last updated 3 years ago

Was this helpful?

Source:

stackoverflow