wann soll ich main.c nur kompilieren und aux.c zusammen und wann soll ich eine Bibliothek aus aux (wie aux.a) machen.
Wenn Sie eine einzelne Dienstprogramm-Datei haben, es in eine Bibliothek setzen kauft man nichts. Nur wenn Sie ein paar separate Dateien haben, die einige allgemeine, aber verwandte Funktionen bereitstellen, ist es sinnvoll, sie in eine Archivbibliothek (oder eine gemeinsam genutzte Bibliothek) zu stellen.
Sie haben tatsächlich drei Entscheidungen in Ihrem Programm den Aufbau:
Compile und verbinden alles zusammen in einem einzigen Schritt:
gcc -o main main.c aux.c
eine richtige Makefile
schreiben. Das wird in getrennter Sammlung führen:
gcc -c main.c
gcc -c aux.c
gcc -o main main.o aux.o
ein Makefile
schreiben, das die Bibliothek nutzt. Dies führt auch in getrennter Sammlung, so etwas wie:
gcc -c main.c
gcc -c aux.c
ar cru libaux.a aux.o
gcc -o main main.o -laux
Für etwas anderes als das kleinste Spielzeug-Programm, sollten Sie zumindest tun # 2, weil Dadurch entfällt die Zeitverschwendung, die bei der Neukompilierung von aux.c
oder main.c
nicht durchgeführt wurde, während sichergestellt wird, dass das Programm ordnungsgemäß erstellt wurde.
Wie gesagt, macht # 3 für eine einzelne Datei nichts (Sie führen nur ein paar unnötige Schritte).
Verwendung einer Bibliothek wird empfohlen, wenn: mehrere verwandte Hilfsdateien
- Sie verschiedene Programme, die Sie bauen, und
- Sie haben, einige (aber nicht alle) von denen in diesen Programmen verwendet .
Betrachten wir den Fall, wo Sie prog1
, prog2
und prog3
und aux1.c
, aux2.c
und aux3.c
Dienstprogramm Dateien. Angenommen, prog1
verwendet Code aus aux1.c
und aux2.c
, prog2
verwendet Code aus aux1.c
und aux3.c
, und prog3
verwendet Code aus allen aux*.c
Dateien.
In dieser Situation mit Fall # 2, werden Sie schreiben müssen Makefile
, die etwa wie folgt aussieht:
prog1: main1.o aux1.o aux2.o
prog2: main2.o aux1.o aux3.o
prog3: main3.o aux1.o aux2.o aux3.o
Das ist (möglicherweise) eine Menge Management.
Vergleich auf die Makefile
, den Fall # 3 (das heißt eine Bibliothek) verwendet:
prog1: main1.o libaux.a
prog2: main2.o libaux.a
prog3: main3.o libaux.a
Einfachere, ist es nicht?
Denken Sie auch darüber nach, was passiert, wenn main1.c
ändert, und beginnt auch aux3.o
zu verwenden. Im Fall # 2 müssten Sie Ihre Makefile
anpassen, aber im Fall # 3 ist Ihre Makefile
bereits korrekt!
An alle Leute, die diese Frage ablehnen, hören Sie bitte auf. Es ist eine sehr vernünftige Frage für einen unerfahrenen Programmierer zu fragen, und im Gegensatz zu dem, was "nahe" Stimmen vorschlagen, hat es eine korrekte und nicht nur eine auf der Meinung der Meinung basierende Antwort. –