Search code examples
makefiledosdosbox

DJGPP make DOS `multiple target patterns`


I'm using DJGPP make under DOS.

This is my main Makefile:

BIN_DIR = bin
OBJ_DIR = obj
DIRS_FOR_CREATION = $(BIN_DIR) $(OBJ_DIR)
SOURCE_DIRS = argparse logger transmission tests

EXECUTABLE_NAME = $(notdir $(shell pwd))
EXECUTABLE_FILE = $(BIN_DIR)/$(EXECUTABLE_NAME)

CC = cc

CFLAGS =
INCLUDES =
LFLAGS =
LIBS =

MAIN_SOURCE = main.c
MAIN_OBJ = $(OBJ_DIR)/main.o

all: directories submodules main $(EXECUTABLE_FILE)
    @echo $(EXECUTABLE_NAME) was compiled

directories:
    mkdir -p $(DIRS_FOR_CREATION)

submodules: 
    $(MAKE) -C $(word 1, $(SOURCE_DIRS))
    $(MAKE) -C $(word 2, $(SOURCE_DIRS))
    $(MAKE) -C $(word 3, $(SOURCE_DIRS))
    $(MAKE) -C $(word 4, $(SOURCE_DIRS))

main:
    $(CC) $(CFLAGS) $(INCLUDES) -c $(MAIN_SOURCE) -o $(MAIN_OBJ)

$(EXECUTABLE_FILE): $(MAIN_SOURCE)
    $(CC) $(CFLAGS) $(INCLUDES) -o $(EXECUTABLE_FILE) $(MAIN_OBJ) $(LFLAGS) $(LIBS)

And this is works perfectly on QNX, but in DOSBox I'm getting the following error:

makefile:19: *** multiple target patterns. Stop.

19 line is all: directories submodules main $(EXECUTABLE_FILE). What should I do to fix this?


Solution

  • You should add:

    $(info EXECUTABLE_NAME = '$(EXECUTABLE_NAME)')
    $(info EXECUTABLE_FILE = '$(EXECUTABLE_FILE)')
    

    so you can see what that variable contains. My suspicion is that it contains a colon (:) which is special to make.