Anmerkungen zur Linux-Studie: Einfache Verwendung von gcc und makefile

gcc und make

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 -cdie .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

おすすめ

転載: blog.csdn.net/darlingqx/article/details/127515644