gcc
gcc ist ein Kompilierungstool für C, C++ und Objective-C. Wenn ein Programm ausgeführt werden soll, muss es im Allgemeinen in eine Datei kompiliert werden, die auf dem Computer ausgeführt werden kann.
Allgemeine Befehle | Wirkung |
---|---|
gcc -o-Datei | Legen Sie die Ausgabe in eine Dateidatei ab und generieren Sie eine ausführbare Datei |
gcc -c | Generieren Sie die Zieldatei.o |
gcc -I dir | Suchen Sie im angegebenen Verzeichnis nach Header-Dateien |
Wenn sich die .c-Datei und die verwendete .h-Datei im selben Verzeichnis befinden (mit Ausnahme der Header-Dateien im Standardverzeichnis)
Zum Beispiel:
$ tree
.
├── main.c
└── system.h
0 directories, 2 files
#main.c中调用了system.h的宏定义TIME=10
#main.c输出宏定义TIME
Sie könnengcc -o
direkt verwenden, um eine ausführbare Datei zu generieren, oder Sie können zuerstgcc -c
die .o-Datei generieren und dann< a i=3>Ausführbare Datei:gcc -o
$ gcc main.c -o prog
$ ls
main.c prog system.h
$ ./prog
time=10
或者
$ gcc -c main.c
$ gcc main.o -o prog
Wenn mehrere .cs vorhanden sind, verwenden Siegcc 1.c 2.c -o prog
.
Wenn sich die .c-Datei und die verwendete .h-Datei nicht im selben Verzeichnis befinden (ausgenommen Header-Dateien im Standardverzeichnis)
$ tree
.
├── main.c
└── system
└── system.h
1 directory, 2 files
Wenn Sie zu diesem Zeitpunkt direkt eingeben$ gcc main.c -o prog
, tritt ein Fehler auf. (Die Datei system.h kann nicht gefunden werden)
main.c:2:10: fatal error: system.h: No such file or directory
2 | #include "system.h"
| ^~~~~~~~~~
compilation terminated.
Zu diesem Zeitpunkt müssen Siegcc -I system/ main.c -o prog
eingeben, dh zuerst -I verwenden, um das Verzeichnis anzugeben, in dem sich die Datei befindet, z. B. system.h im System.
$ gcc -I system/ main.c -o prog
$ ls
main.c prog system
$ ./prog
time=10
或者
$ gcc -I system/ -c main.c
$ gcc main.o -o prog
Makefile
Die Hauptfunktion von make besteht darin, die zum Generieren einer neuen Version des Zielprogramms erforderlichen Schritte auszuführen, d. h. automatisch zu erkennen, welche Teile eines großen Programms neu kompiliert werden müssen, und dann Befehle zum Neukompilieren auszugeben , hauptsächlich zum Erstellen der folgenden Eine Makefile-Datei wird verwendet, um sie zu verbinden. Makefile-Dateien enden normalerweise mit makefile und Makefile ,GNUmakefilebenannt.
Das Format, dem das Makefile folgt:
目标文件:[相依文件...]
<tab>命令[#注释]
目标文件:[相依文件...]
<tab>命令[#注释]
...
Hinweis: Es bedeutet, vor dem Befehl die Tabulatortaste auf der Tastatur zu drücken!!!
Andernfalls ist Ihr Makefile eine Datei im falschen Format und es wird ein Fehler angezeigt beim Laufen gemeldet.
Geben Sie ein Beispiel für ein Makefile:
prog wird von main.o generiert, main.o wird von main.c generiert,
Zusätzlich Eine Zeile ist der entsprechende Generierungsbefehl.
prog:main.o
gcc main.o -o prog
main.o:main.c
gcc main.c -c
Wenn sich die .h-Datei und die .c-Datei beide im selben Verzeichnis befinden
Im aktuellen Verzeichnis
$ tree
.
├── add.c
├── add.h
├── main.c
├── subtract.c
├── subtract.h
└── system.h
0 directories, 6 files
Die Abhängigkeiten sind:
Haupt c | system.h add.c subtrahieren.c |
---|---|
system.h | add.h subtrahieren.h |
add.c | zus.h |
subtrahieren.c | subtrahieren.h |
Schreiben Sie nun ein Makefile, um das Programm zu kompilieren und zu generieren.
prog:main.o add.o subtract.o
gcc main.o add.o subtract.o -o prog
main.o:main.c system.h
gcc -c main.c
add.o:add.c
gcc -c add.c
subtract.o:subtract.c
gcc -c subtract.c
Operationsergebnis:
$ make
gcc -c main.c
gcc -c add.c
gcc -c subtract.c
gcc main.o add.o subtract.o -o prog
$ ls
Makefile add.h main.c prog subtract.h system.h
add.c add.o main.o subtract.c subtract.o
$ ./prog
num1=3,num2=1$
Wenn sich die .c- und .h-Dateien nicht im selben Verzeichnis befinden:
$ tree
.
├── main.c
└── my_math
├── my_math.c
└── my_math.h
1 directory, 3 files
Die Abhängigkeiten sind:
Haupt c | my_math.c my_math.h |
---|---|
my_math.c | my_math.h |
Schreiben Sie nun ein Makefile, um das Programm zu kompilieren und zu generieren.
prog:main.o my_math.o
gcc my_math.o main.o -o prog
main.o:main.c my_math/my_math.h
gcc -I my_math/ -c main.c
my_math.o:my_math/my_math.c
gcc -c my_math/my_math.c
Das laufende Ergebnis ist:
$ make
gcc -I my_math/ -c main.c
gcc -c my_math/my_math.c
gcc my_math.o main.o -o prog
$ ls
Makefile main.c main.o my_math my_math.o prog
$ ./prog
num1=3,num2=1