Problème d'un Makefile complexe erroné
Comme le problème ne venais pas du Shell, je reprends ici la discussion intitullée « Problème lancement Makefile dans Shell ».
J'ai un Makefile qui ne fonctionne pas !
En premier lieu, mon arborescence disque :
Code:
1 2 3 4 5 6 7 8
|
sample/
|__ src/
| |__ liste.c
| |__ main1.c
|__ inc/
| |__ liste.h
|__ Makefile |
Puis les sources :
Code:
1 2 3 4 5 6 7
|
#include <stdio.h>
void
world (void)
{
printf (" World\n");
} |
Code:
1 2 3 4 5 6 7 8 9
|
#include <stdio.h>
#include "liste.h"
int main (void)
{
printf ("Hello ");
world ();
return 0;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
# Makefile
# Répertoires de travail :
SRC = ./src
INC = ./inc
OBJ = ./obj
LIB = ./lib
BIN = ./bin
# Nom des fichiers à générer
OBJ_FILES = $(OBJ)/liste.o $(OBJ)/main1.o
LIB_FILES = $(LIB)/liste.a
EXE_FILES = $(BIN)/main1.exe
# Compilateur C Ansi
CC = @gcc
AR = @ar -r
RM_FILES = @rm -f $(OBJ)/* $(LIB)/* $(BIN)/*
# */
RM_FOLDERS = @rmdir $(OBJ)/ $(LIB)/ $(BIN)/
ECHO = @echo
# Flags de compilation / débug / warning
CFLAGS = -Wall -W -pedantic -pedantic-errors -ansi -O2 -I$(INC)
# Crée les dossiers et compile les fichiers sources nécessaires pour créer l'exécutable
all: $(OBJ) $(LIB) $(BIN) $(OBJ_FILES) $(LIB_FILES) $(EXE_FILES)
$(OBJ) $(LIB) $(BIN):
@mkdir $@
$(OBJ)/%.o : $(SRC)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(LIB)/%.a : $(OBJ)/%.o
$(AR) $@ $<
$(BIN)/%.exe : $(OBJ)/%.o
$(CC) -o $@ $< $(LIB_FILES)
$(ECHO) " ----- Programme compilé ----- "
# Lance le programme
start: all
$(ECHO) " ----- Lancement du programme ----- "
@$(EXE_FILES)
# Détruit tout les fichiers créés par all
clean:
$(RM_FILES)
$(RM_FOLDERS)
$(ECHO) " ----- Environnement nettoyé ----- " |
Et voici les résultats sous AIX :
Code:
1 2 3 4 5
|
$ make all
make: 1254-002 Cannot find a rule to create target ./obj/liste.o from dependencies.
Stop.
$ |
:cry:
Je ne vois vraiment pas pourquoi ce Makefile ne fonctionne pas 8O
Qui peut m'aider ?