make mit subfolders



  • Hallo,
    ich habe mal eine Frage zu make. Ich habe eine Datei "main.c", im selben Ordner befindet sich das Makefile was ich nach einem einfachen Tutorial geschnitzt habe und ein Ordner "Directory". In "Directory" befindet sich "folder.c" und "folder.h".

    Wie bringe ich make dazu das ganze zu kompilieren?
    Danke, im voraus

    # Makefile
    #
    # .h and .c files
    
    SOURCE = main.c directory/folder.c
    HEADERS = directory/folder.h
    OBJECTS = ${SOURCE:.c=.o}
    
    .PREFIXES = .c .o
    CC = gcc
    CFLAGS = -g -Wall -std=gnu99
    RM = rm
    
    .c.o:
    	${CC} -c ${CFLAGS} $<
    
    prgname: ${OBJECTS}
    	${CC} -o $@ ${OBJECTS} -lm
    
    all:	prgname
    
    clean:
    	${RM} ${OBJECTS} prgname *~ core
    
    // main.c
    
    #include "directory/folder.h"
    
    int main(int argc, char** argv)
    {
      func("Hello World!");
    
      exit(EXIT_SUCCESS);
    }
    
    // folder.h
    /*
    //*/
    
    #ifdef FOLDER
    #define FOLDER
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    //...
    
    void func(const char*); 
    
    #endif
    
    // folder.c
    /*
    //*/
    
    #include "folder.h"
    
    void func(const char* txt)
    {
      puts(txt);
    }
    


  • Was funktioniert denn an dem ganzen nicht? Bekommst du eine Fehlermeldung?



  • Hauptsaechlich findet der Linker kein directory/folder.o

    Ich habe schon ueberlegt ob ich in der #include Anweisung vllt keinen Pfad angeben soll und make das allein uebernimmt oder ob ich statt der allgemeinen Anweisung aus den .c Files .o Files zu machen (im Makefile) keinen Pfad angeben soll, sondern den "direkten" Dateinamen, aber irgendwie laeuft das immer auf eine aehnliche Fehlermeldung raus. Ich diese Situation mit Ordner und Datei jetzt eig nicht sooo exotisch, umso nerviger ist es trotzdem. 😉



  • Fabeltier schrieb:

    Hauptsaechlich findet der Linker kein directory/folder.o

    Ja. Und warum? Weil der Compiler die .o Datei im aktuellen Verzeichnis ablegt. Wenn du nur mal ein bisschen geschaut hättest, was dein Makefile macht, dann wäre deine Frage gewesen: "Wie kann ich dem Compiler sagen, wo er die .o-Datei hinspeichert".

    So musst du dein Makefile ändern:

    .c.o:
         ${CC} -o $@ -c ${CFLAGS} $<
    


  • Na, danke auch fuer die freundliche Antwort!

    Das der Linker die Object Files nicht finden kann, entnehme ich bereits der Fehlermeldung. Ob ich das ablegen derselbigen nun aendern soll oder einfach die Files von woanders nehmen soll, ob ich nun das Makefile umschreiben muss oder die include Anweisung aendern soll.. ehrlich gesagt find ich das jetz eher nervig. Aber wenigstens klappts, Danke. 😉



  • Fabeltier schrieb:

    Das der Linker die Object Files nicht finden kann, entnehme ich bereits der Fehlermeldung.

    Du hast geschrieben, dass der Linker die Datei nicht findet. Dass dein Makefile die Objektdatei nicht da erstellt, wo sie hin soll, hättest du ruhig erwähnen können. Es hätte sie ja nach der Fehlermeldung auch garnicht erstellen können. Fürs nächste mal, bitte genauere Fehlerbeschreibung.


Anmelden zum Antworten