Makefilefrage: Wie kann jede Quelldatei von Änderungen ihrer header abhängen?



  • Hallo, wie im titel schon gesagt, möchte ich das bei der benutzung meines makesfiles jede quelldatei auch dann neu kompiliert wird, wenn sich einer ihrer #includes ändert.

    also z.B.: main.cpp inkludiert header.h . header.h ändert sich ==> main.cpp wird beim nächsten make neukompiliert

    Ich hoffe auf eure Hilfe
    Gruß Fencer

    SRCDIR := ../src
    INCDIR := -I$(SRCDIR)/include -I/usr/cross/include
    
    BINDIR := /usr/cross/bin
    
    CFLAGS := -Wall -Wextra $(INCDIR) -nostdlib -nostdinc -fno-builtin -fno-stack-protector 
    csources :=$(shell find $(SRCDIR) -mindepth 1 -maxdepth 5 -name "*.c")
    asmsources :=$(shell find $(SRCDIR) -mindepth 1 -maxdepth 5 -name "*.s")
    
    cobjects := $(patsubst %.c,%.o,$(csources))
    asmobjects:=$(patsubst %.s,%.o,$(asmsources))
    depfiles:= $(patsubst %.c,%.d,$(csources))
    
    all: kernel
    
    kernel: $(cobjects) $(asmobjects)
    	$(BINDIR)/i586-elf-ld -o kernel -Tlink.ld $(cobjects) $(asmobjects)
    clean:
    	rm $(cobjects) $(asmobjects)
    	rm kernel
    
    %.o: %.c
    	$(BINDIR)/i586-elf-gcc -c $< -o $@ $(CFLAGS)
    
    %.o: %.s
    	nasm -felf32 $<
    

    edit: wenn nötig bitte verschieben. tschuldigung für den fall.



  • Hier geht es nur um Standard (also ISO) C++ Fragen! Eine Makefile hat damit nichts zu tun.

    Ansonsten schau dir die Ultimative Makefile an!



  • trotzdem danke für deine Antwort



  • Alternativ kannst du dir auch einfache Buildsysteme wie SCons anschauen.
    Wenn du dann bei der Verteilung des Programmes wegen dessen Verbreitung auf make setzen willst, wären sowieso die autotools angebracht.



  • Einfach die Objekte (*.o) auch von den Header-Dateien abhängig machen. Entweder manuell (soundso.o : dings.h bums.h), oder automatisch (makedepend).

    Alternativ kannst Du ein anderes Build-System nutzen, welches solche Abhängigkeiten automatisch erkennt (cmake, Boost.Build, ...)

    Gruß,
    SP



  • jap die methode aus dem ultimate makefile hat funktioniert.

    danke ich werd mir auch scons, autotool,... mal genauer anschauen


Anmelden zum Antworten