2017-01-02 1 views
-2

Die Suche hat nichts gebracht.Wann man Dateien zusammenstellt und wann man eine Bibliothek benutzt

Wenn ich eine Datei main.c und ein Paar aux.h und aux.c für nützliche Funktionen habe, wann sollte ich nur main.c und aux.c zusammen kompilieren und wann sollte ich eine Bibliothek aus aux (wie aux.a).

+1

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

Antwort

1

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:

  1. Compile und verbinden alles zusammen in einem einzigen Schritt:

    gcc -o main main.c aux.c

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

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

  1. Sie verschiedene Programme, die Sie bauen, und
  2. 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!

+0

Vielen Dank für die eingehende Antwort! Das löscht alle Fragen für mich! – NomeQueEuLembro

1

Wenn die aux.c-Datei häufig an vielen anderen Stellen verwendet wird, können Sie eine statische oder dynamische Bibliothek erstellen. wenn es nur ein einmaliges lief Spielzeug Programm, zählt nichts