Bonjour,
J’essaye de faire un makefile pour compiler un projet C qui a l’architecture suivante :
.
|- src
|- bind
|- main.c
|- matrix
|- matrix.c
|- matrix.h
|- types
| base.h
Voici ce que j’ai essayé :
APP_NAME := app
C := gcc
CFLAGS := -Wall -Wextra -std=gnu11
DEBUG ?= 1
ifeq ($(DEBUG), 1)
CFLAGS += -DDEBUG -g
endif
BINDIR := bin
OBJDIR := obj
SRCDIR := src
SOURCES := $(shell find $(SRCDIR) -name "*.c")
OBJECTS := $(addprefix $(OBJDIR)/,$(shell echo $(notdir $(SOURCES)) | sed 's/\.c/\.o/g'))
$(BINDIR)/$(APP_NAME): $(OBJECTS) | $(BINDIR)
@$(CC) -o $@ $^
$(OBJDIR)/%.o: %.c | $(OBJDIR)
@$(CC) $(CFLAGS) -c -o $@ $<
$(BINDIR) $(OBJDIR):
@mkdir $@
clean:
@rm -rf $(OBJDIR)/*
mrpropre: clean
@rm -rf $(BINDIR) $(OBJDIR)
.PHONY: clean mrpropre
Ce que je souhaiterai avoir c’est l’ensemble de mes fichiers objets dans un dossier obj
à la racine et l’exécutable dans un dossier bin
.
Soit :
.
|- obj
|- main.o
|- matrix.o
|- bin
|- app
Ou alors
.
|- obj
|- bind
|- main.o
|- matrix
|- matrix.o
|- bin
|- app
Je préfère la seconde solution comme ça me permettrai d’avoir des fichiers .c avec potentiellement le même nom dans des modules différents.
Sauriez-vous comment je pourrais le faire ?
Merci à vous.
+0
-0