Makefile

Bonjour,
Je débute en C, et j'ai un petit problème avec mon make, il me met

Pas de règle pour fabriquer la cible "test2.c", necessaire pour "test2.o". Arret.

Voici mon fichier makefiles :
all : test2.o
gcc obj/test2.o -o bin/test2

test2.o : test2.c
gcc -c src/test2.c -o obj/test2.o

Comme vous l'aurez surement compris, j'ai 3 répertoires sous la racine du répertoire du makefiles et les différents fichiers doivent être stockés dedans...
J'ai bien mis la tabulation.
Seul le fichier ./src/test2.c existe.

<config>Debian</config>

2 réponses

  1. Contributeur
    Salut Mmh35,

    Si j'ai bien compris ce que tu veux faire, essaye comme cela :

    CFLAGS=-Wall -g  
    
    all: test2  
    
    test2.o:  
        gcc -o obj/test2.o -c src/test2.c  
    
    test2: test2.o  
        gcc -o bin/test2 obj/test2.o

    Cela met le .o dans obj/, l'exécutable dans bin/, le fichier .c étant dans src/

    Dal
    1. Merci Dal

      Et si je veux mettre plusieurs compilations dans le même makefile, je met à la suite

      all : test3
      ........


      ?
      1. Contributeur
        Je ne comprend pas bien ta question.

        Si tu as plusieurs exécutables à créer, tu peux les mettre dans "all:", séparés par des espaces.

        all: test2 test3

        Il faudra que le Makefile gère les dépendances de la création de chacun des exécutables.

        Pour éviter d'avoir à taper tous les noms de fichiers, tu peux utiliser des "pattern rules", ou utiliser des fonctions de substitution, pour dire, par exemple, au compilateur comment produire des fichiers .o à partir de tous les fichiers .c, et comment utiliser tous les fichiers .o pour produire un exécutable.

        Vois la documentation de GNU Make et ses exemples:

        http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Pattern-Examples.html#Pattern-Examples
        http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Text-Functions.html#Text-Functions

        Dal