2016-12-10 4 views
-1

Wie füge ich Berechtigungen zu dieser einfachen Make-Datei hinzu?Wie kann ich Berechtigungen in einem grundlegenden Makefile geben

all: shell ls cat groups 

shell: shell.o cd.o 
    gcc shell.o cd.o -o shell 

cat: cat.o 
    gcc -c cat.c -o cat 

ls: ls.o header.h 
    gcc -c ls.c -o ls 

groups: groups.o groups.h 
    gcc -c groups.c -o groups 

shell.o: shell.c tlpi_hdr.h 
    gcc -c shell.c 

cd.o: cd.c tlpi_hdr.h 
    gcc -c cd.c 

cat.o: cat.c tlpi_hdr.h 
    gcc -c cat.c 

ls.o: ls.c header.h 
    gcc -c ls.c 

groups.o: groups.c groups.h 
    gcc -c groups.c 

clean: 
    rm *.o shell cat ls groups 

Ich brauche cat/ls/Gruppen/cd innerhalb der Schale laufen, die ich erstellt, kann aber nicht, weil es keine Berechtigungen. Wie kann ich das machen?

+2

Der Compiler macht normalerweise die Programme, die er erzeugt, ausführbar, so dass Sie dies nicht tun müssen. Möglicherweise müssen Sie das Verzeichnis jedoch zu Ihrem 'PATH' hinzufügen. Wie wird deine 'CD' als separate Binärdatei funktionieren? –

+0

Erfahren Sie mehr über 'make' und seine eingebauten Regeln. Versuchen Sie 'make -p'. Siehe [dies] (http://stackoverflow.com/a/16751650/841108) –

+0

Lesen Sie [Erweiterte Linux-Programmierung] (http://advancedlinuxprogramming.com/). Beachten Sie, dass 'cd' kein externes Programm sein kann (es muss eine eingebaute Shell sein). –

Antwort

1

Als Beispiel dieser Regel:

groups: groups.o groups.h 
    gcc -c groups.c -o groups 

sagt GCC eine Objektdatei namens groups (anstelle der normalen groups.o) zu produzieren, weil Sie die -c Option enthalten. Objektdateien sind keine ausführbaren Dateien, daher macht der Compiler sie nicht ausführbar, daher Ihr Problem mit den Berechtigungen. Beachten Sie, dass die Regel make erfordert, um groups.o zu erstellen, ignoriert dann jedoch die Objektdatei, da sie den Quellcode neu kompiliert.

Sie wollten etwas mehr schreiben wie:

groups: groups.o 
    gcc groups.o -o groups 
groups.o: groups.h 

Sie brauchen viel mehr Makros verwenden - oder Sie können die Regeln aus dem Make-Datei verlassen, da make weiß, wie groups von groups.c zu bauen.

Sie sollten auch mit Warnoptionen kompilieren. Mindestens -Wall; vorzugsweise -Wall -Wextra -Werror (und ich benutze noch mehr Optionen als diese). Vielleicht möchten Sie Optimierung (-O3); Vielleicht möchten Sie das Debuggen (-g). Diese werden normalerweise über Makros gehandhabt und dann in den Befehlen verwendet.

Verwandte Themen