2017-02-17 4 views
0

Ich bin neu mit Gcc in Ubuntu, also versuche ich ein Makefile zu erstellen. Mein Projektordner heißt innerhalb dieses Ordners "Projekt". Ich habe drei weitere Ordner: Quellen, Header, Objekte (leer).Makefile mit Dateien in verschiedenen Verzeichnissen

Mein Makefile sollte in der Lage sein, die Objektdateien im Ordner "Objekte" zu erstellen. Ich möchte jedoch meine ausführbare Datei und Makefile im Hauptordner: "Projekt", dann kann ich die ausführbare Datei und die Objektdateien reinigen. Wie kann ich das Programm einschließlich dieser Ordner kompilieren? Dies ist mein Makefile als Beispiel. Der Ordner "Projekt" befindet sich in meinem Home-Ordner.

CFLAGS= -ansi -pedantic -Wall -c 
all: project 

project: ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o 
    gcc -o project ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o 

main.o: ./sources/main.c 
    gcc $(CFLAGS) ./sources/main.c 

factorial.o: ./sources/factorial.c ./headers/factorial.h 
    gcc $(CFLAGS) ./sources/factorial.c 

gcd.o: ./sources/gcd.c ./headers/gcd.h 
    gcc $(CFLAGS) ./sources/gcd.c 

greatestNumber.o: ./sources/greatestNumber.c ./headers/greatestNumber.h 
    gcc $(CFLAGS) ./sources/greatestNumber.c 

primeNumbers.o: ./sources/primeNumbers.c ./headers/primeNumbers.h 
    gcc $(CFLAGS) ./sources/primeNumbers.c 

clean: 
    rm -f ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o project 

Dank

+0

Sind Sie sicher, dass 'main.o' nicht von Kopfzeilen abhängt? – aschepler

+0

es hängt von gcd.h ab, faktorial.h, greatestNumber.h, primeNumbers.h – user3654532

Antwort

5

Sie sollten den Weg zu den Objekt Ziele geben wie Sie für alle anderen Dateinamen zu tun.

./objects/main.o: ./sources/main.c 
    gcc $(CFLAGS) ./sources/main.c 

... und so weiter.

+1

Sie müssen auch die '-o'-Option für den Compiler verwenden, um es zu veranlassen, die Objektdatei dort auszugeben, wo Sie es haben wollen. Am einfachsten ist es, -o $ @ 'zu verwenden und die automatische Variable von make für das Ziel zu verwenden. – MadScientist

Verwandte Themen