I have a makefile in a directory of mine which builds scripts with certain environment variables set. What if I want to create another makefile in the same directory with different environment variables set? How should I name the two make files? Does makefile.1
and makefile.2
work? How do I call them?

- 208,748
- 37
- 389
- 560

- 1,057
- 2
- 9
- 12
5 Answers
You can give sensible names to the files like makefile.win and makefile.nix and use them:
make -f makefile.win
make -f makefile.nix
or have a Makefile that contains:
win:
make -f makefile.win
nix:
make -f makefile.nix
and use make win
or make nix

- 94,503
- 21
- 155
- 181
-
1In the latter case, what will be the default behavior of `make`? – pretzlstyle Jun 08 '18 at 19:26
-
1By default it will use the one called Makefile. And if you don't specify a target, the default target is the one in the first recipe in the file (which can of course depend on later ones). – Jeffrey Benjamin Brown Oct 12 '18 at 22:31
You can name makefile whatever you want. I usually name it like somename.mk
. To use it later you need to tell make what makefile you want. Use -f
option for this:
make -f somename.mk

- 8,854
- 5
- 38
- 53
Actually you can have two set of environment variables in the same make file. for example
COMPILER = gcc
CCFLAGS1 = -g
CCFLAGS2 = -Wall
a: main.c
${COMPILER} ${CCFLAGS1} main.c
b: test.c
${COMPILER} ${CCFLAGS2} test.c
then you can just say make a
or make b
. Depending on what you want.
Also it is possible with -f flag to call which makefile you want to call.

- 1,503
- 2
- 15
- 27
You can do something like this rather than using multiple makefiles for the same purpose. You can pass the environment or set a flag to the same makefile. For eg:
ifeq ($(ENV),ENV1)
ENV_VAR = THIS
else
ENV_VAR = THAT
endif
default : test
.PHONY : test
test:
@echo $(ENV_VAR)
Then you can simply run the make command with arguments
make ENV=ENV1

- 297
- 2
- 8
I have two makefiles in the same directory. Many of the recipes have identical names and here are two solutions:
1. Prefix in make
proja_hello:
@echo "hello A"
projb_hello:
@echo "hello N"
2. Keep two separate files
- Project A has
makefile
. Typemake hello
. - Project B has a separate make file called
projb.mk
. Typebmake hello
. - This works since I've added
alias bmake ='make -f projb.mk
to my .bashrc. Note! This command can be called anywhere but only works where projb.mk exists. Note! You lose autocompletion of make with the alias and typingmake -f projb.mk hello
is not better than typingmake projb_hello
.

- 589
- 10
- 11