Let's say you have a project structure with lots of Makefiles and there is a top level Makefile that includes all the other.

How can you list all the possible targets?

I know writing


and then tabbing to get the suggestions would generally do the trick, but in my case there are 10000 targets. Doing this passes the results through more and also for some reason scrolling the list results in a freeze. Is there another way?

2 Answers 2


This is how the bash completion module for make gets its list:

make -qp |
    awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}' |
    sort -u

It prints out a newline-delimited list of targets, without paging.


FreeBSD and NetBSD make(1) have a built-in variable called .ALLTARGETS. You can print out its contents like this


That will unfortunately print out a space-delimited list. I find the following more useful

make -V .ALLTARGETS | tr ' ' '\n'

It prints out each target on its own line.

  • If you want to also exclude pseudo targets (.WAIT), you can change the command as follows: make -V '$(.ALLTARGETS:N.WAIT_*:O)'.
    – Bass
    May 16 at 23:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.