MAKE: compiling all files once AND creating object files in another directory

I have a project that includes many source files in different folders. For some reason, my Makefile can either do one of the following, but not at the same time (what I really want): -

1) Compile all files in a separate directory

2) Compile ONCE, gcc needs to be called once, as this significantly reduces compilation time.

This is a piece of code that works to achieve option 1: -

INCLDDIRS := "The needed include directories"
CFLAGS = "some c flags"
C_SOURCE = "Many many source files in different directories"
C_SOURCE_NAMES = $(notdir $(C_SOURCE))
OBJECT_DIRECTORY = ObjDir
C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_NAMES:.c=.o) )

all: $(OBJECT_DIRECTORY) $(C_OBJECTS)

$(OBJECT_DIRECTORY):
    mkdir ObjDir

$(OBJECT_DIRECTORY)/%.o:%.c
    $(CC) $(CFLAGS) $(INCLDDIRS) -c -o $@ $<

For some reason, the above compiles each source file c separately and generates an object file (i.e. gcc is called for all source files). This is not what I want. However, at least all the generated files are in ObjDir

, 2: -

INCLDDIRS := "The needed iclude directories"
CFLAGS = "some c flags"
C_SOURCE = "Many many source files in different directories"
C_SOURCE_NAMES = $(notdir $(C_SOURCE))
OBJECT_DIRECTORY = ObjDir
C_OBJECTS = $(OBJECT_DIRECTORY)/*.o

all: $(OBJECT_DIRECTORY) $(C_OBJECTS)

$(OBJECT_DIRECTORY):
    mkdir ObjDir

$(C_OBJECTS): (C_SOURCE)
    $(CC) $(CFLAGS) $(INCLDDIRS) -c $(C_SOURCE)

(, gcc ), , Makefile, . mv , .

: Makefile, ?

+4
1

makefile, , .

INCLDDIRS := "The needed include directories"
CFLAGS = "some c flags"
C_SOURCE = "Many many source files in different directories"
C_SOURCE_NAMES = $(notdir $(C_SOURCE))
OBJECT_DIRECTORY = ObjDir
BINARY := your_binary

all: $(BINARY)

$(OBJECT_DIRECTORY):
        mkdir $@

$(OBJECT_DIRECTORY/$(BINARY): $(C_SOURCE) | $(OBJECT_DIRECTORY)
        $(CC) $(CFLAGS) $(INCLDDIRS) -o $@ $^

( make , , ).

.

make , . . ( . .)

, makefile , , C_OBJECTS . $(OBJECT_DIRECTORY)/*.o .

, , .

+3

Source: https://habr.com/ru/post/1616553/


All Articles